首页 > 代码库 > Leetcode-Remove Duplicates from Sorted List II

Leetcode-Remove Duplicates 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,
Given 1->2->3->3->4->4->5, return 1->2->5.
Given 1->1->1->2->3, return 2->3.

Solution:

 1 /** 2  * Definition for singly-linked list. 3  * public class ListNode { 4  *     int val; 5  *     ListNode next; 6  *     ListNode(int x) { 7  *         val = x; 8  *         next = null; 9  *     }10  * }11  */12 public class Solution {13     public ListNode deleteDuplicates(ListNode head) {14         if (head==null || head.next==null) return head;15         ListNode preHead = new ListNode(-1);16         preHead.next = head;17         ListNode cur = head;18         ListNode pre = preHead;19 20         //NOTE:We need to be every carefull about the condition,21         //because if the last node be deleted, the cur is null in the next step.22         //however, if the node before the last node is deleted, the cur is the last node in the next step,23         //we then need to stop also, otherwise cur.next.val is invalid.24         while (cur!=null && cur.next!=null){25             if (cur.val==cur.next.val){26                 while (cur.val==cur.next.val){27                     cur.next = cur.next.next;28                     if (cur.next==null)29                         break;30                 }31                 pre.next = cur.next;                                32                 cur = pre.next;33             } else {34                 pre = cur;35                 cur = cur.next;36                 if (cur.next==null)37                     break;38             }39         }40 41         return preHead.next;            42     }43 }

 

Leetcode-Remove Duplicates from Sorted List II