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;
	}
}

点赞