程式設計師面試金典 鍊錶

2021-06-22 20:12:09 字數 623 閱讀 6563

這裡我們可以使用乙個表來記錄訪問過的節點值,這樣只要一次遍歷就可以。但是需要輔助空間。

如果不使用臨時緩衝區,該怎麼解決?

使用兩個指標,乙個指標指向當前節點,另乙個指標用於向後遍歷剩餘節點,把重複節點刪除。這裡刪除只是用乙個節點就可以,檢查ptr->next->data是否重複就可以。

這裡給出兩種方法:第一種使用遞迴。

node * nthtolast(node * head,int k,int & i)

第二種方法是迭代法:

linkedlistnode nthtolast(linkedlistnode *head,int k)

if(p2 == null)

return null;

while(p2 != null)

return p1;

}

在這個問題中,你訪問不到鍊錶的首節點,只能訪問那個待刪除節點,因此可以吧待刪除節點的後繼結點的值複製到當前節點,然後刪除後繼結點即可。

bool deletenode(linkedlistnode * node )

《程式設計師面試金典》回文鍊錶

題目描述 請編寫乙個函式,檢查鍊錶是否為回文。給定乙個鍊錶listnode phead,請返回乙個bool,代表鍊錶是否為回文。測試樣例 返回 true 返回 false 思路我們有兩種方法,比較容易想到的方法應該是使用棧儲存前一半的結點,然後對於後一半的結點再乙個個的與棧內的結點比較是否相等 還有...

程式設計師面試金典 2 4 鍊錶分割

編寫 以給定值x為基準將鍊錶分割成兩部分,所有小於x的結點排在大於或等於x的結點之前 給定乙個鍊錶的頭指標 listnode phead,請返回重新排列後的鍊錶的頭指標。注意 分割以後保持原來的資料順序不變。struct listnode class partition else else else...

程式設計師面試金典 02 05 鍊錶求和

給定兩個用鍊錶表示的整數,每個節點包含乙個數字。這些數字是反向存放的,也就是個位排在鍊錶首部。編寫函式對這兩個整數求和,並用鍊錶形式返回結果。示例 輸入 7 1 6 5 9 2 即617 295 輸出 2 1 9,即912 高階 假設這些數字是正向存放的,請再做一遍。示例 輸入 6 1 7 2 9 ...