9 刪除鍊錶中的重複結點

2021-09-10 09:00:22 字數 1047 閱讀 4275

在乙個排序的鍊錶中,存在重複的結點,請刪除該鍊錶中重複的結點,重複的結點不保留,返回煉表頭指標。 例如,鍊錶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...