82. Remove Duplicates from Sorted List II
題目
給出一個有序鏈表,刪掉有重複數字的所有節點,只保留原列表中不同的數字。
例如:
給出:1->2->3->3->4->4->5, 返回1->2->5.
給出: 1->1->1->2->3, 返回 2->3.
代碼塊
public class Solution {
public static ListNode deleteDuplicates(ListNode head){
if(head == null) return null;
ListNode fakeHead = new ListNode(0);
fakeHead.next = head;
ListNode left = fakeHead;
ListNode right = head;
while(right != null){
while(right.next != null && right.val == right.next.val){
right = right.next;
}
if(left.next == right){
left = right;
}else{
left.next = right.next;
}
right = right.next;
}
return fakeHead.next;
}
}
這是實現函數。
public static void print(ListNode head){
while(head != null){
System.out.println(head.val);
head = head.next;
}
}
這是打印函數。
代碼分析
這道題目比 I ,是要刪除所有重複的元素,思路大體不變,如果遇到重複的元素,將right右移,直到指向最後一個不重複的元素。此時進行判斷,left如果指向的元素如果等於right,就左右移動到同位置;否則,左右同時後移。
第一遍,背下來,慢慢理解。