题目描述:
给定一个无序单链表的头结点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;
}
}