在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
2017-08-24 21:11
796 查看
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; */ class Solution { public: ListNode* deleteDuplication(ListNode* pHead) { if (pHead == NULL || pHead->next == NULL) return pHead; /*---------先为链表创建一个头结点---------*/ ListNode* p1 = new ListNode(0); p1->next = NULL;//p1的轨迹记录没有重复的节点 ListNode* head = p1; ListNode* p2 = pHead;//p2用于遍历原链表,方便p1跳过重复的点 while(p2){ if(p2->next && p2->val == p2->next->val){ while(p2->next && p2->val == p2->next->val){ p2 = p2->next; } p2 = p2->next;//p2跳过重复串中的最后一个重复节点 //防止链表尾出现重复,p2==NUll,程序跳出will循环,而p1没有跳过尾部重复 p1->next = p2; } else{//如果没有重复 p1->next = p2; p1 = p2; p2 = p2->next; } } return head->next;//返回时要去除头节点 } };
相关文章推荐
- 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
- 链表——删除排序链表的重复结点(一个都不保留)
- 链表分割 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以
- 给定一个排序链表,删除所有重复的元素每个元素只留下一个。
- <LeetCode> 题113:删除排序链表中的重复元素2
- 《剑指offer》面试题57 删除链表中重复的结点 C++ 实现 以及 错误总结 (指针问题)!!
- 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
- 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点
- 算法22:给定一个排好序的linked list,删除其中所有的重复元素。比如给定1->2->3->3-> 4->4->5,返回1->2->5。给定1->1->1->2->3,返回2->3
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。
- 给定链表的头指针和一个结点指针,在O(1) 时间删除该结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点
- [Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点
- 给定一个排序的链表,删除所有具有重复数字的节点,从原始列表中只留下不同的数字。
- 有一个单项的链表,在没有头结点的情况下,只知道有一个指向结点B的指针p,假设这个结点B不是尾结点,删除该节点B。
- 排序的链表中删除重复的结点
- 数据结构与算法分析笔记与总结(java实现)--链表8:对排序链表删除重复结点问题
- 在一个无头指针的单链表中,删除指针p所指向的结点
- LinkLists 删除链表中的一个给定指针的结点 @CareerCup