题目
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5
思路
在待删除节点的前一个节点设置preNode指针,一直找到带删除节点的最后一个位置,将待删除节点的最后一个设置为preNode的next域。
代码
public static ListNode deleteDuplication(ListNode pHead) {
ListNode pre=null;
ListNode cur=pHead;
if(pHead==null||pHead.next==null){
return pHead;
}
while (cur!=null){
if(cur.next!=null&&cur.next.val==cur.val){
//一直找到带删除节点的最后一个位置
while (cur.next!=null&&cur.next.val==cur.val){
cur=cur.next;
}
cur=cur.next;
if(pre==null){//带删除的是头节点
pHead=cur; //将当前的节点置为头节点
}else{
pre.next=cur; //
}
}else {
pre=cur;
cur=cur.next;
}
}
return pHead; //
}