- 用一个提前头节点放在原头节点之前,可以完美解决处理原头节点的情况
- 两个指针处理:pre代表前一个已经处理完的节点,node代表当前处理节点
- 当node与之后的节点相同时,则一直后移到最后一位;如果Pre与node相邻,则说明无重复节点,不处理,否则越过node节点
public class Solution {
public ListNode deleteDuplication(ListNode pHead){
ListNode head = new ListNode(-1), pre = head, node = pHead;
head.next = pHead;
while(node != null) {
// 跳过重复节点
while(node.next != null && node.val == node.next.val) {
node = node.next;
}
// 跳过最后一个重复节点
if(pre.next != node) {
node = node.next;
pre.next = node;
} else {
pre = node;
node = node.next;
}
}
return head.next;
}
}