劍指offer 3 從尾到頭列印鍊錶

2021-10-02 01:48:06 字數 1477 閱讀 9923

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。

/**

* public class listnode

* }

**/

自己用了兩種方法

1. 利用list的add(int index, e element)方法,遍歷鍊錶,每次插入到索引為0的位置。

public arraylistprintlistfromtailtohead3(listnode listnode) 

listnode now = listnode;// 當前遍歷結點

while (now != null)

return list;

}

(後來才想到自帶的collections逆序方法,直接add向後新增到list然後reverse也可以的)

2. 定義乙個頭結點,然後乙個乙個向前插入?思路稍微有點點繞。先附**:

public arraylistprintlistfromtailtohead1(listnode listnode) 

listnode head = null;// 頭結點

listnode now = listnode;// 當前遍歷結點

while (now != null) else

now = now.next;// 修改當前結點為下乙個

} now = head;

while (now != null)

return list;

}

1) 定義乙個頭結點,乙個now節點作為遍歷的當前結點

2) 遍歷傳入的鍊錶,拿到當前結點,定義為乙個新的結點temp,temp的val為當前結點的val,next為空。

3) 如果此時頭結點為空,則將這個新的結點作為頭結點,否則將temp的next指向當前的頭結點,也就是將這個結點插入到頭結點前方。

4) 然後將這個temp修改為頭結點,遍歷到下乙個節點的時候,則會繼續向temp前面插入結點

5) 每次修改now結點為next,否則會死迴圈

6) 遍歷完成後,再將新建出來的鍊錶正向迴圈一次逐個插入list中

由於stack的使用還沒有學習到,所以只想到了上述兩種方法。後來看別人的思路時,比較好的是棧和遞迴兩種:

3. 棧的簡單運用

public arraylist printlistfromtailtohead(listnode listnode)

while (!stack.empty())

return list;}

4. 遞迴——?看完之後真是恍然大悟,錘胸頓足,悔恨交加啊~!

public arraylist printlistfromtailtohead(listnode listnode)         

return list;

}

劍指offer(3) 從尾到頭列印鍊錶

輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值。輸入為鍊錶的表頭 輸出為需要列印的 新鍊錶 的表頭 鍊錶是一種動態資料結構,是因為在建立鍊錶時,無須知道鍊錶的長度。當插入乙個結點時,我們只需要為新結點分配記憶體,然後調整指標的指向來確保新結點被鏈結到鍊錶中。記憶體分配不是在建立鍊錶時一次性完成,而是每新...

劍指offer 3 從尾到頭列印鍊錶

coding utf 8 class listnode def init self,x self.val x self.next none class solution 返回從尾部到頭部的列表值序列,例如 1,2,3 def init self self.result def printlistfr...

劍指offer 3 從尾到頭列印鍊錶

程式設計資料獲取 codelab 輸入乙個鍊錶,按煉錶值從尾到頭的順序返回乙個arraylist,鍊錶定義如下 struct listnode 下面提供3種思路 1 正序遍歷並儲存,逆序輸出 class solution reverse vecval.begin vecval.end 這裡得益於re...