LeetCode(82)——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.


AC:

class Solution {
    public ListNode deleteDuplicates(ListNode head) {
        if (null == head || null == head.next) {
            return head;
        }
        
        ListNode dummyNode = new ListNode(-1);
        ListNode singleNode = dummyNode;
        ListNode currentNode = head;
        dummyNode.next = head;
        
        boolean dupFlag = false;
        
        while (null != currentNode && null != currentNode.next) {
            if (currentNode.val != currentNode.next.val) {
                if (false == dupFlag) {
                    singleNode.next = currentNode;
                    singleNode = singleNode.next;
                }
                else {
                    dupFlag = false;
                }
            }
            else {
                dupFlag = true;
            }
            currentNode = currentNode.next;
        }
        
        if (false == dupFlag) {
            singleNode.next = currentNode;
        }
        else {
            singleNode.next = null;
        }
        
        return dummyNode.next;
    }
}
该题和83类似,只是现在重复节点不保留,直接删除,链表内只留下非重复节点,加个标志判定节点是否为重复节点即可,当更新非重复节点时,标志位要重置。

猜你喜欢

转载自blog.csdn.net/weixin_39120845/article/details/79455470