刪除鏈表中重復(fù)的結(jié)點(diǎn)
題目描述
在一個(gè)排序的鏈表中,存在重復(fù)的結(jié)點(diǎn),請(qǐng)刪除該鏈表中重復(fù)的結(jié)點(diǎn)飒焦,重復(fù)的結(jié)點(diǎn)不保留,返回鏈表頭指針屿笼。 例如牺荠,鏈表1->2->3->3->4->4->5 處理后為 1->2->5
/*解題思路:遞歸
*/
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode deleteDuplication(ListNode pHead)
{
//當(dāng)前只有0或1個(gè)節(jié)點(diǎn),之間返回
if(pHead==null||pHead.next==null){
return pHead;
}
if(pHead.val==pHead.next.val){//當(dāng)節(jié)點(diǎn)與前下一個(gè)節(jié)點(diǎn)重復(fù)
ListNode pNode=pHead.next;
//跳過(guò)與當(dāng)前節(jié)點(diǎn)重復(fù)的所有節(jié)點(diǎn)驴一,尋找第一個(gè)不重復(fù)的節(jié)點(diǎn)
while(pNode!=null&&pNode.val==pHead.val){
pNode=pNode.next;
}
return deleteDuplication(pNode);
}else{//當(dāng)前節(jié)點(diǎn)不是重復(fù)節(jié)點(diǎn)
pHead.next=deleteDuplication(pHead.next);//保留當(dāng)前節(jié)點(diǎn)休雌,從下一個(gè)節(jié)點(diǎn)開(kāi)始遞歸
return pHead;
}
}
}