解决办法:定义三个引用(分别指向头结点的前驱结点prev和头结点p1以及下一节点p2)
如果p1的值与p2的值相同,则三个引用分别向后走
否则p2进行移动直至与p1的值不同
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
if (pHead == null) {
return null;
}
ListNode prev = null;
ListNode p1 = pHead;
ListNode p2 = pHead.next;
while (p2 != null) {
if (p1.val != p2.val) {
prev = p1;
p1 = p2;
p2 = p2.next;
} else {
while (p2 != null && p2.val == p1.val) {
p2 = p2.next;
}
if (prev == null) {
pHead = p2;//链表中所有元素都一样
} else {
prev.next = p2;
}
p1 = p2;
if (p2 != null) {
p2 = p2.next;
}
}
}
return pHead;
}
}