82.Remove Duplicates from Sorted List II

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章