面試題16 反轉鍊錶

2021-07-13 08:25:28 字數 729 閱讀 7526

struct listnode

};

此題可以用遞迴和頭插法來做。

用遞迴做起來稍微複雜一點,而且會有個問題,就是當鍊表太長時,可能會導致系統棧溢位。

大體思路就是,當我們每遞迴的鍊錶的乙個節點時,如果該節點不是最後乙個,就先遞迴反轉它後面的鍊錶,然後將該節點push_back到尾部,所以我們需要乙個tail指標來表明最後乙個節點。否則return即可。

**如下:

listnode* _reverselist(listnode* head,listnode*& tail)

listnode* tmp=_reverselist(head->next,tail);

tail->next=head;

tail=tail->next;

return tmp;

}listnode* reverselist(listnode* head)

這種方法的思想就是,我們從鍊錶的第二個節點開始(如果有的話),一次摘取當前節點並頭插到前面已經部分反轉的鍊錶中去。需要注意的是,我們要維護三個節點指標,分別指向已經部分反轉的煉表頭、當前節點和當前節點的下乙個節點。

**如下:

listnode* reverselist(listnode* head)

return head;

}

以上

完整**及測試用例在github上:點我前往

面試題16 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。hint 請務必使用鍊錶 輸入 輸入可能包含多個測試樣例,輸入以eof結束。對於每個測試案例,輸入的第一行為乙個整數n 0 n 1000 代表將要輸入的鍊錶的個數。輸入的第二行包含n個整數t 0 t 1000000 代表鍊錶元素。輸出 對應每個...

面試題16 反轉鍊錶

題目 定義乙個函式,輸入乙個鍊錶的頭結點,反轉該鍊錶並輸出反轉後鍊錶的頭結點。思路 設定三個指標p q temp,p用來指向當前結點,q用來指向當前結點的前乙個結點,temp指向當前結點的下乙個結點,遍歷鍊錶的結點時,先儲存當前結點p的下乙個結點到temp,然後讓當前結點的next指向前乙個結點p,...

面試題16 反轉鍊錶

題目 反轉鍊錶。輸入鍊錶的頭結點,反轉輸出反轉後鍊錶的頭結點。這種鍊錶操作的題之前做過,還專門寫過鍊錶反轉的東東。咋一看,覺得這用遞迴不so easy嗎。結果,papa打臉了,寫了半個多小時才出來,面試肯定就掛了。都要哭了,寫一萬遍都不會啊。先用遞迴實現 struct listnode class ...