題目:在一個排序的鏈表中,存在重複的結點,請刪除該鏈表中重複的結點,重複的結點不保留,返回鏈表頭指針。
例如,鏈表1->2->3->3->4->4->5 處理後爲 1->2->5
public ListNode deleteDuplication(ListNode pHead)
{
if(pHead==null){
return pHead;
}
ListNode G=new ListNode(0);
G.next=pHead;
ListNode cur=G;//爲了保存新的鏈表的頭指針以便於返回
ListNode pre=pHead;
while(pre!=null){
boolean flage=false;
//該步驟是爲了找出重複的元素,並且刪除重複的元素到只剩下一個
while(pre.next!=null&&pre.val==pre.next.val){//用while循環是因爲有重複的次數可能不只1次
flage=true;//說明是重複的元素
pre=pre.next;//把後面的一個元素覆蓋前面一個元素
}
//刪除剩下的那一個重複的元素,並且跳過之後的步驟
if(flage){
pre=pre.next;//把後面的一個元素覆蓋前面一個
continue;
}
//該部分爲不存在重複的情況
cur.next=pre;
cur=cur.next;
pre=pre.next;
}
cur.next=null;//將鏈表的最後置爲空
return G.next;//
}