首页 > 代码库 > [Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点
[Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given1->2->3->3->4->4->5, return1->2->5.
Given1->1->1->2->3, return2->3.
这题和Remove duplicate from sorted list的区别在于,本题中,只要结点只要出现重复则该值相等的结点都要删除,上题中留一个不删。
思路:这里有可能有修改表头(如:1->1->-1>2>3),一般修改表头的题目都会需要一个辅助指针,所以要新建一个结点。遍历链表,遇到相等的相邻结点,直接继续遍历;遇到不相等的两相邻结点时,若pre->next=cur说明cur没有重复的,pre=pre->next即可,若是不等于说明,可能有重复,则,pre连接cur但是pre不移动,需重新进入循环检验是否没有重复(没有重复时,pre->next=cur),直到没有重复结点。源代码
1 class Solution { 2 public: 3 ListNode *deleteDuplicates(ListNode *head) 4 { 5 if(head==NULL) return head; 6 7 ListNode *newList=new ListNode(-1); 8 newList->next=head; 9 ListNode *pre=newList; 10 ListNode *cur=head; 11 12 while(cur) 13 { 14 while(cur->next&&pre->next->val==cur->next->val) 15 { 16 cur=cur->next; 17 } 18 19 if(pre->next==cur) 20 pre=pre->next; 21 else 22 { 23 pre->next=cur->next; 24 } 25 26 cur=cur->next; 27 } 28 return newList->next; 29 } 30 };
[Leetcode] Remove duplicate from sorted list ii 从已排序的链表中删除重复结点
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。