在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶1->2->3->3->4->4->5 處理後為 1->2->5
/*
struct listnode
};*/
class solution
};
解法:
class solution
//如果p指向鍊錶中第乙個元素,p -> ... -> q ->... , 要刪除p到q, 將指向鍊錶第乙個元素的指標phead指向q->next。
if( p == phead )
else//如果p不指向鍊錶中第乙個元素,pre -> p ->...->q ->... ,要刪除p到q,即pre->next = q->next
//當前處理的p要向鍊錶尾部移動
p = q->next;
}//第二種是後結點和前結點無重複
else//如果沒有重複結點,則一直往後移動
}return phead;//注意返回的必須是phead,因為此時的phead鍊錶已經被改變了指向}
};
解法2:遞迴
class solution
// 當前結點是重複結點
if (phead->val == phead->next->val)
//相當於將不重複的結點放入棧中
return deleteduplication(pnode); // 從第乙個與當前結點不同的結點(此結點不重複)開始遞迴;
} // 當前結點不是重複結點
else
}};
其中的:phead->next = deleteduplication(phead->next); 實參phead.next表示:當前節點與下一節點不同,所以將下一節點放入遞迴程式去參加下一輪的比較,這樣就將phead保留了下來。返回值給phead.next表示deleteduplication返回了乙個無重複的節點,所以要讓當前節點指向它。
參考:
刪除鍊錶中重複的結點
題目描述 在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5。刪除鍊錶中重複的結點 author 過路的守望 public class duplicationnode 新建乙個節點指向頭結點 li...
刪除鍊錶中重複的結點
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 解法一 遞迴 public class listnode public class solution if phead.next.val phe...
刪除鍊錶中重複的結點
在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。例如,鍊錶1 2 3 3 4 4 5 處理後為 1 2 5 題目分析 刪除鍊錶中的結點要比較當前結點是否與前面結點和後面結點相同,只有兩個都不同的結點才保留。用pre儲存前乙個節點,cur儲存當前結點,c...