递增链表中删除重复的。重复的节点值保留最开始的那一个。
public static Node dup(Node head) {
Node curr = head.next;
while (curr != null) {
Node next = curr.next;
if (next != null && curr.value == next.value) {
curr.next = next.next;
} else {
curr = curr.next;
}
}
return head.next;
}
递增链表中删除重复的。不保留重复的节点值。
注意:必须有头结点,否则不好处理刚开始就连续重复的情况。如果传进来的是首结点,那就在前面现造一个头结点。
思路:设置 prev ,curr 指针, prev 指针指向重复节点前面的那个结点,而curr指针相当于工作指针,一直往后面搜索。
public static Node dup(Node head) {
Node prev = head;
Node curr = prev.next;
while (curr != null) {
if (curr.next != null && curr.value == curr.next.value) {
curr = curr.next;
while (curr.next!=null && curr.value==curr.next.value){
curr = curr.next;
}
curr = curr.next;
prev.next =curr;
} else {
prev=curr;
curr = curr.next;
}
}
return head.next; // 这里如果写pHead,在牛客网的编译器中会有一部分样例不通过
}
造头结点的方法:
public static Node dup(Node first) { // 传进来首结点
Node head = new Node(0); // 生成头结点
head.next=first; // 头结点指向首结点
Node prev = head;
Node curr = first;
while (curr != null) {
if (curr.next != null && curr.value == curr.next.value) {
curr = curr.next;
while (curr.next!=null && curr.value==curr.next.value){
curr = curr.next;
}
curr = curr.next;
prev.next =curr;
} else {
prev=curr;
curr = curr.next;
}
}
return head.next; // 这里如果写pHead,在牛客网的编译器中会有一部分样例不通过
}