190507打卡:删除无序单链表中值重复出现的节点

题目描述:
给定一个无序单链表的头结点head,删除其中值重复出现的节点。
例如:
1->2->3->3->4->4->2->1->1->null,删除值重复出现的节点后为:
1->2->3->4->null。
要求:额外空间复杂度为O(1)

思路:类似于选择排序的过程,时间复杂度为O(n * n),额外空间复杂度为O(1)
首先是头结点,值为1,向后遍历链表找到和1相同的节点并删除,
此时链表变为:1->2->3->3->4->4->2->null,然后是下一个节点,也就是值为2的节点,找到相同并删除,
此时链表变为1->2->3->3->4->4->null,重复此过程,直至相同节点全部删除

public class Code_020_RemoveDuplicateElements {
    
    public static class Node {
        public int data;
        public Node next;
        
        public Node(int data) {
            this.data = data;
        }
    }
    
    public static Node removeDuplicate(Node head) {
        Node equal = head;
        Node cur = null;
        Node pre = null;
        
        while(equal != null) {
            cur = equal.next;
            pre = equal;
            while(cur != null) {
                if (cur.data == equal.data) {
                    pre.next = cur.next;
                } else {
                    pre = cur;
                }
                cur = cur.next;
            }
            equal = equal.next;
        }
        
        return head;
    }
}

点赞