82. 删除排序链表中的重复元素 II

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


class Solution {

    private boolean equal(ListNode n1, ListNode n2) {
        if (n1 == null && n2 == null) {
            return true;
        }

        if (n1 == null || n2 == null) {
            return false;
        }

        return n1.val == n2.val;
    }

    public ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return head;
        }

        ListNode nextHead = new ListNode(), tail = nextHead;

        ListNode cur = head, pre = null;
        while (cur != null) {

            /**
             * 当前元素重复
             */
            while (cur != null && (equal(pre, cur) || equal(cur, cur.next))) {
                pre = cur;
                cur = cur.next;
            }

            tail.next = cur;
            tail = cur;
            cur = cur != null ? cur.next : null;
        }

        return nextHead.next;
    }
}

class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
上一篇:今天睡眠质量82分


下一篇:第82期-基础技巧:双指针 移动零