輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。
vector<
int>
printlistfromtailtohead
(listnode* head)
std::
reverse
(ret.
begin()
, ret.
end())
;return ret;
}
vector<
int>
printlistfromtailtohead
(listnode* head)
注釋:這裡使用了棧的思想,因為使用遞迴呼叫,先進後出,自然而然返回的的是逆序輸出,一層一層進入,一層一層出來,要理解這個思想
vector<
int>
printlistfromtailtohead
(listnode* head)
vector<
int> ret;
while
(pre)
return ret;
}
煉表頭結點作用:
1、防止單鏈表是空的而設的。當鍊表為空的時候,帶頭結點的頭指標就指向頭結點,如果當鍊表為空的時候,頭結點的指標域的數值為null。
2、為了方便單鏈表的特殊操作,插入在表頭或者刪除第乙個結點。這樣就保持了單鏈表操作的統一性。
3、單鏈表加上頭結點之後,無論單鏈表是否為空,頭指標始終指向頭結點,因此空表和非空表的處理統一,方便了單鏈表的操作,也減少了程式的複雜性和出現bug的機會。
4、對單鏈表的多數操作應明確對哪個結點以及該結點的前驅。不帶頭結點的鍊錶對首元結點、中間結點分別處理等;而帶頭結點的鍊錶因為有頭結點,首元結點、中間結點的操作相同,從而減少分支,使演算法變得簡單,流程清晰。
劍指offer 反轉鍊錶 C
輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。通過三個指標來實現。反轉鍊錶,希望在時間複雜度和空間複雜度較優,那麼最好進過一次歷遍就實現。經過分析,需要儲存當前節點 上乙個節點和後面乙個節點。初始化 開始處理第乙個節點的時候,他的下乙個節點應該指向空節點。所以將第乙個指標p1初始化指向乙個空節點。第二...
劍指offer 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。方法1 將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。方法2 使用三個指標遍歷單鏈表,逐個鏈結點進行反轉。方法3 從第2個節點到第n個節點,依次逐節點插入到第1個節點 head節點 之後,最後將第乙個節點挪到新錶的表尾。public class l...
劍指offer 反轉鍊錶
輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。1.非遞迴 struct listnode class solution listnode ppre null listnode p phead listnode pnext null while p null else p pnext return p...