题目描述:
在一个排序的链表中,存在重复的节点,请删除该链表中重复的节点,重复的节点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
/*
链表为有序,所以如果重复,节点是连在一起的
前面提到过,删除就要记录前驱节点
用两个指针解决
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead){
if(pHead==null||pHead.next==null){
return pHead;
}
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&&p1.val==p2.val){
//处理连续有多个重复的节点
p2 = p2.next;
}
if(prev==null){//说明整个链表的节点都是重复的
pHead = p2;
}else{
prev.next = p2;
}
p1 = p2;
if(p2!=null){//此时 p2 可能是空,对应上边 prev == null 的情况
p2 = p2.next;
}
}
}
return pHead;
}
}