[LeetCode] 82. Remove Duplicates from Sorted List II 移除有序链表中的重复项 II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
和83. Remove Duplicates from Sorted List 类似,这个题是有重复的元素就全部去掉,只保留独立的元素。
解法:去除重复元素的方法和83类似。但由于第一个元素有可能是重复的,如果删除了就不能往下接了,所以新建一个dummy, dummy.next指向链表。最后返回dummy.next就可以了。
Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | class Solution { public ListNode deleteDuplicates(ListNode head) { if (head == null ) return head; ListNode helper = new ListNode( 0 ); helper.next = head; ListNode pre = helper; ListNode cur = head; while (cur!= null ) { while (cur.next!= null && pre.next.val==cur.next.val) { cur = cur.next; } if (pre.next==cur) { pre = pre.next; } else { pre.next = cur.next; } cur = cur.next; } return helper.next; } } |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | class ListNode: def __init__( self , x): self .val = x self . next = None def __repr__( self ): if self is None : return "Nil" else : return "{} -> {}" . format ( self .val, repr ( self . next )) class Solution( object ): def deleteDuplicates( self , head): """ :type head: ListNode :rtype: ListNode """ dummy = ListNode( 0 ) pre, cur = dummy, head while cur: if cur. next and cur. next .val = = cur.val: val = cur.val; while cur and cur.val = = val: cur = cur. next pre. next = cur else : pre. next = cur pre = cur cur = cur. next return dummy. next |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Solution { public : ListNode *deleteDuplicates(ListNode *head) { if (!head || !head->next) return head; ListNode *start = new ListNode(0); start->next = head; ListNode *pre = start; while (pre->next) { ListNode *cur = pre->next; while (cur->next && cur->next->val == cur->val) cur = cur->next; if (cur != pre->next) pre->next = cur->next; else pre = pre->next; } return start->next; } }; |
类似题目:
[LeetCode] 83. Remove Duplicates from Sorted List 移除有序链表中的重复项
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步