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
.
https://oj.leetcode.com/problems/remove-duplicates-from-sorted-list-ii/
思路:需要一个dummy head辅助。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Solution { public ListNode deleteDuplicates(ListNode head) { ListNode newHead = new ListNode(-1); newHead.next = head; ListNode pre = newHead; ListNode cur = head; while (cur != null && cur.next != null) { if (cur.val == cur.next.val) { while (cur != null && cur.next != null && cur.val == cur.next.val) { cur = cur.next; } cur = cur.next; pre.next = cur; } else { pre = cur; cur = cur.next; } } return newHead.next; } public static void main(String[] args) { ListNode head = ListUtils.makeList(1, 1, 2, 3, 3); ListUtils.printList(head); head = new Solution().deleteDuplicates(head); ListUtils.printList(head); } }
第二遍记录:
注意pre和dummyHead的用法
public class Solution { public ListNode deleteDuplicates(ListNode head) { if(head==null||head.next==null) return head; ListNode newHead = new ListNode(-1); newHead.next=head; ListNode pre = newHead; ListNode cur = head; while(cur!=null&&cur.next!=null){ if(cur.val==cur.next.val){ while(cur.next!=null&&cur.val==cur.next.val){ cur=cur.next; } cur=cur.next; pre.next=cur; }else{ pre=cur; cur=cur.next; } } return newHead.next; } }