反轉鍊錶(C ) 劍指offer

2021-10-05 18:41:34 字數 973 閱讀 3823

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個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...