主要思路是建立前驱结点,在遇到相同的数时,前驱结点的next直接来到不等的地方
public class DeleteDuplication {
public static ListNode deleteDuplication(ListNode pHead) {
if (pHead == null) {
return null;
}
ListNode prev = new ListNode();
ListNode fake = prev;
prev.next = pHead;
ListNode cur = pHead;
ListNode next = pHead.next;
while (next != null) {//让next一直走
if (cur.val != next.val) {//cur和next不等继续走
prev = prev.next;
cur = cur.next;
next = next.next;
} else {//cur和next等了
if (next != null && cur.val == next.val) {//next不为空时,cur和next还等的话
next = next.next;//next继续走
}
prev.next = next;//出来时,next已经到了不相等的位置了,prev的next直接跳到next;
cur = next;//然后让cur等于next
if (next != null) {
next = next.next;//next继续走
}
}
}
return fake.next;//返回的是fake.next,因为fake是无效结点
}
}