[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语言实现代码如下:
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; }
相关文章推荐
- [LeetCode]Merge Two Sorted Lists & Remove Duplicates from Sorted List 两个有序链表合并为一个&删除链表重复元素
- Leetcode:Remove Duplicates from Sorted List 删除单链表中重复的节点
- 删除重复节点 Remove Duplicates from Sorted List
- LeetCode | Remove Duplicates from Sorted List(删除链表中重复的数据)
- [LeetCode] Remove Duplicates from Sorted List 删除排序链表中的重复元素
- leetcode(83)—— 删除已排序链表重复元素(Remove Duplicates from Sorted List)
- LeetCode(Remove Duplicates from Sorted List) 两道删除排序链表中重复数字
- (LeetCode)Remove Duplicates from Sorted List --- 链表中删除重复元素
- Leetcode Remove Duplicates from Sorted List 删除链表中的重复元素
- [Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点
- [Leetcode] Remove duplicates from sorted list 从已排序的链表中删除重复元素
- 【leetcode 移除有序序列重复数字】Remove Duplicates from Sorted Array(List) I(II)
- LeetCode-Remove Duplicates from Sorted List II-从有序链表中移除重复元素-链表操作
- C实现 LeetCode->Remove Duplicates from Sorted List (枚举法)(单链表去重复节点)
- LeetCode | Remove Duplicates from Sorted Array(删除有序数组的重复元素)
- leetcode83---Remove Duplicates from Sorted List(删除重复元素)
- Leetcode Remove Duplicates from Sorted List II 删除链表中重复的元素II
- LeetCode | Remove Duplicates from Sorted List II(删除链表中重复结点2)
- 【LeetCode-面试算法经典-Java实现】【082-Remove Duplicates from Sorted List II(排序链表中删除重复元素II)】
- 删除有序链表的重复元素 Remove Duplicates from Sorted List