|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
此代码中去重返回出来的链表有问题 好像头节点变成了最后尾节点
比如链表1 1 2 2 3 4 5
返回出只有一个5
看了答案去重函数中应该是return head;
但是我想知道 因为x是指向了*head的地址 他们是一个链表
为什么返回x是尾节点 返回head是头节点呢?
(我有尝试去理解 因为在去重函数中 head一直没有产生变化 只在最开始被x指向了一次 所以一直是头节点
然后x节点位置 也就是每次循环x当前节点在向后推,推移到最后一个节点 所以返回出去的是最后一个节点
return出去的x也只是这个单链表的最后一个节点的指针地址? 最开始我一直想成return出去的x是一个单链表。。所以我最开始的想法是错误的,现在的理解正确吗)
您目前的理解是正确的。在deleteNode函数中,x和head指向同一个链表。
x在函数中用于遍历和更新链表,当遍历完成时,x指向链表的尾节点。所以在函数中返回x时,实际上返回的是链表尾节点的指针地址。
而head始终指向链表的头节点,所以正确的返回值应该是head。
为了修复deleteNode函数,您应该在函数最后返回head,而不是x:
- struct Node *deleteNode(struct Node *head)
- {
- if(head == NULL)
- {
- return head;
- }
-
- struct Node *x = head;
- while(x->next != NULL)
- {
- if(x->value == x->next->value)
- {
- x->next = x->next->next;
- }
- else
- {
- x = x->next;
- }
- }
-
- return head;
- }
复制代码
这样修改后,您的程序将能够正确地去除链表中的重复元素并输出结果。
|
|