|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 GodLordGee 于 2021-11-19 00:28 编辑
在不看小甲鱼的视频前提下,想要自己实现链表的删除功能
目前遇到了一个问题,就是我在删除元素的函数里面定义了一个指针结构体temp,然后让这个指针结构体指向头指针head,然后我通过temp执行了删除操作
在函数中打印,可以看到temp中我指定的元素都被我删除了,但是当返回主程序打印head时,发现head中的元素没有改变,是哪里出问题了吗?
以下是输出实例
- 请直接输入数据?-1退出:1
- 1 当前head中的数值是:
- 1 请直接输入数据?-1退出:1
- 1 1 当前head中的数值是:
- 1 1 请直接输入数据?-1退出:2
- 1 1 2 当前head中的数值是:
- 1 1 2 请直接输入数据?-1退出:999
- 开始删除。。。请输入要删除的数值:1
- 要删除的原始链表是:1 1 2
- 当前temp中的数值是:1 2
- 当前temp中的数值是:2
- --=-=-=-=
- ................
- 当前head中的数值是:1 1 2
复制代码
可以看到,temp中正确删除了数据,但是head没有改变。
以下是代码,在执行完输入数据操作后,输入999可以开始进行删除的操作。请重点看看delet函数。
本帖最后由 jhq999 于 2021-11-19 06:45 编辑
- void delet(struct Node **head, int num){
- struct Node *temp;
- struct Node *prior;
- temp = *head;
- prior = NULL;
- printf("要删除的原始链表是:");
- printNum(head);
- putchar('\n');
- while(temp != NULL)
- {
- if(temp->value == num )
- {
- printf("当前temp中的数值是:");
- printNum(&temp);
- putchar('\n');
- if(NULL==prior)////////符合条件的是表头
- *head=temp->next;
- else ////////符合条件的不是表头
- prior->next=temp->next;
- free(temp);
- break;/////跳出循环
- }
- prior=temp;
- temp=temp->next;
- }
- //temp=NULL,链表没有符合条件的
- }
复制代码
|
|