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