您的位置:首页 > 编程语言 > C语言/C++

[leetcode]Remove Duplicates from Sorted List (删除有序节点的值重复的节点 C语言)

2015-03-28 18:17 405 查看
Remove Duplicates from Sorted List

Given a sorted linked list, delete all duplicates such that each element appear only once.

For example,

Given 1->1->2, return 1->2.

Given 1->1->2->3->3, return 1->2->3.

题意:删除有序链表的值重复的节点,给定一个有序链表,删除出现重复值的节点

解题思路:通过比较前后两个节点值,若重复就删除一个节点,若不重复就遍历下一个节点。

设置一个临时变量用于存储当前节点的指针,比较当前节点的值与下一个节点值是否相同

若相同则删除下一个节点,并让指针指向下下一个节点,若下一个节点的指针为空则退出,若两个节点值不相等则指针向后移动一位,继续比较

难点:重复节点的判断,指针的移动,重复节点的释放。

C语言实现代码如下:

/**
* 解题思路:删除有序链表中的相同的节点值,遍历链表,设置一个临时变量用于存储当前节点的指针,比较当前节点的值与下一个节点值是否相同
* 若相同则删除下一个节点,并让指针指向下下一个节点,若下一个节点的指针为空则退出,若两个节点值不相等则指针向后移动一位,继续比较
* Definition for singly-linked list.
* struct ListNode {
*     int val;
*     struct ListNode *next;
* };
*/
struct ListNode *deleteDuplicates(struct ListNode *head) {
struct ListNode *temp, *temp1, *p;
p = head;
if(head == NULL){//若链表为空,则返回
return NULL;
}
temp1 = temp = NULL;
while(p->next != NULL){
temp = p->next;
if(p->val == temp->val){//若两节点值相等
if(temp->next != NULL){//若下下一个节点存在,删除下一个节点,指针指向下下一个节点
temp1 = p->next->next;
p->next->next = NULL;
p->next = temp1;
}else{//若下下一个节点不存在,则表示到达链表尾部,退出循环
p->next = NULL;
break;
}
}else{//若两节点值不相等,指针向后移动一位
p = temp;
}
}
return head;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐