数据结构--单向链表

1.按位置查找返回元素的值

// 按位置查找元素
int query_num(node_p P, int pos) {
	if (P == NULL) {
		return 0;
	}
 
	if (pos <= 0 || pos > P->len) {
		printf("所选插入位置不准确\n");
		return 0;
	}
 
	int i;
	node_p H = P;
	for (i = 0; i < pos; i++, H = H->next);
 
	return H->data;
 
}


2.按值修改(多个一样的值改第一个)

// 按值修改
void update_value(node_p P, int target, int value) {
	if (P == NULL) {
		return;
	}
	node_p H = P->next;
	int i;
	for (i = 0; i < P->len; i++, H = H->next) {
		if (target == H->data) {
			H->data = value;
			break;
		}
	}
 
	if (i == P->len) {
		printf("没有要修改的值\n");
	}
}


3.单向链表的逆置

// 单向链表逆置
void reverse(node_p P) {
 
	// 获取最后一个结点
	node_p H = P;
	//for(int i = 0; i < P->len; i++,H = H->next)
	while (H->next != NULL) {
		H = H->next;
	}
	printf("最后一个值:%d\n", H->data);
	//H = H->next;
 
	node_p T = fun(P->next);
	T->next = NULL;
	P->next = H;
}
 
// 递归
node_p fun(node_p n) {
	if (n->next == NULL) {
		return n;
	}else {
		node_p p = fun(n->next);
 
		p->next = n;
		return n;
	}
}


4.尝试实现单向循环链表
        a.特点:尾结点指向头结点
        b.创建
        c.头插、尾插、任意位置插入
        d.头删、尾删、任意位置删除

你可能感兴趣的:(数据结构,链表)