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,就左右移动到同位置;否则,左右同时后移。
第一遍,背下来,慢慢理解。