劍指offer 面試題57 刪除鍊錶中重複的結點

2021-07-11 12:51:51 字數 478 閱讀 5148

題目:在乙個排序的鍊錶中,如何刪除重複的結點?例如1->2->3->3->4->4->5刪除重複結點後為1->2->5。

思路:題目看似很簡單,但要寫出無bug魯棒性好的**其實有一定難度。首先重複結點可能出現在頭結點,如果要修改頭結點的指標,那麼傳入的引數應該為指標的指標,即指向頭結點指標的指標。對於重複結點,處理的過程是先找到後面的第乙個不等於當前結點的結點,然後將當前結點的前乙個結點指向這個結點,中間部分的結點刪除。同時當前結點後移,如果當前結點為頭結點,那麼要做的就只有更改頭結點的指標。

void deleteduplication(listnode** phead)

else

if(pprenode == null)

*phead = pnext;

else

pprenode->m_pnext = pnext;

pnode = pnext;}}

}

《劍指Offer》面試題57 刪除鍊錶中重複的節點

題目 在乙個排序的鍊錶中,如何刪除重複的節點?樣例輸入 1 2 3 3 4 4 5 樣例輸出 1 2 5 1.新建乙個頭節點,以防第乙個節點被刪除。2.儲存當前節點上個節點,迴圈遍歷整個鍊錶,如果當前節點的值與下乙個節點的值相等,則將當前節點的值與next.next節點的值比較,直到不相等或者nul...

劍指offer 面試題18 刪除鍊錶的節點

給定單向鍊錶的頭指標和乙個節點指標,定義乙個函式在o 1 時間內刪除該節點。鍊錶節點與函式的定義如下 public static class listnode 將要刪除節點的next節點直接複製到該節點上。刪除原先的next節點 public void deletenode listnode hea...

劍指Offer面試題18 刪除鍊錶的節點

刪除鍊錶的節點 struct listnode void deletenode listnode plisthead,listnode ptobedelete if ptobedelete next nullptr 要刪除的節點不是尾節點 else 要刪除的節點為尾節點 p next nullptr...