【劍指offer】【3】輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
題目:輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
知識補充:java Stack類(菜鳥教程)
棧是Vector的一個子類,它實現了一個標準的後進先出的棧。
堆疊只定義了預設建構函式,用來建立一個空棧。 堆疊除了包括由Vector定義的所有方法,也定義了自己的一些方法。
Stack()
除了由Vector定義的所有方法,自己也定義了一些方法:
序號 | 方法描述 |
---|---|
1 | boolean empty() 測試堆疊是否為空。 |
2 | Object peek( ) 檢視堆疊頂部的物件,但不從堆疊中移除它。 |
3 | Object pop( ) 移除堆疊頂部的物件,並作為此函式的值返回該物件。 |
4 | Object push(Object element) 把項壓入堆疊頂部。 |
5 | int search(Object element) 返回物件在堆疊中的位置,以 1 為基數。 |
思路一:使用棧結構來實現
//定義連結串列
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack stack = new Stack();
ArrayList newlist = new ArrayList();
if(listNode == null){
System.out.println("連結串列為空!");
}
while(listNode != null){
stack.push(listNode.val);
listNode = listNode.next;
}
while(!stack.empty()){
newlist.add(stack.pop());
}
return newlist;
}
}
思路:在不改變連結串列的前提下,遍歷連結串列同時進行入棧操作存入棧中,然後進行出棧操作並存入ArrayList中。
棧:先進後出,正好符合本題的意思。
初次接觸的疑惑總結:
- 類中可以有該類作為變數型別的成員變數,只是不能進行new物件而已,不然就像一個死迴圈一樣永無止境,但是可以宣告。
- 這裡定義連結串列時,連結串列元素中包含有下一個元素的地址,next就為指向下一個連結串列元素的地址值。
- listNode.next :和正常呼叫成員變數是一樣的,next為地址值
- listNode == null:判斷下一個連結串列元素的地址值是否為空
思路二:使用Collections的reverse()方法,直接將list反轉
import java.util.ArrayList;
import java.util.Collections;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<Integer>();
while(listNode != null){
list.add(listNode.val);
listNode = listNode.next;
}
Collections.reverse(list);
return list;
}
}
思路三:使用遞迴,遞迴的本質是棧結構(若元素比較多,導致函式呼叫層級也深,可能導致函式呼叫棧溢位)
public class Solution {
ArrayList<Integer> arrayList=new ArrayList<Integer>();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
this.printListFromTailToHead(listNode.next);
arrayList.add(listNode.val);
}
return arrayList;
}
}
相關文章
- 3. 從尾到頭列印連結串列(劍指offer)
- 劍指offer-從尾到頭列印連結串列-phpPHP
- 力扣 - 劍指 Offer 06. 從尾到頭列印連結串列.md力扣
- ④從尾到頭列印連結串列
- 劍指OFFER-從頭到尾列印連結串列(Java)Java
- 劍指offer(java實現)第3題“從尾到頭列印連結串列”-牛客網Java
- offer通過--5從尾到頭列印連結串列-2
- 定義一個函式,輸入一個連結串列的頭節點,反轉該連結串列並輸出反轉後連結串列的頭節點函式
- 劍指Offer-38-兩個連結串列的第一個公共節點
- JZ-003-從尾到頭列印連結串列
- 【LeetCode】【連結串列】劍指 Offer 52. 兩個連結串列的第一個公共節點 思路解析和程式碼LeetCode
- 劍指offer——兩個連結串列的第一個公共結點C++C++
- 劍指offer——連結串列中倒數第k個結點
- 力扣 - 劍指 Offer 52. 兩個連結串列的第一個公共節點力扣
- [每日一題] 第九題:從尾到頭列印連結串列每日一題
- [連結串列】2.輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。[多益,位元組考過]
- 劍指offer-----刪除連結串列中的重複節點
- 力扣 - 劍指 Offer 22. 連結串列中倒數第k個節點力扣
- [連結串列]leetcode1019-連結串列中的下一個更大節點LeetCode
- 連結串列中的節點每k個一組翻轉
- 劍指 Offer 24.反轉連結串列
- 劍指 Offer 24. 反轉連結串列
- PHPer也刷《劍指Offer》之連結串列PHP
- 雙向連結串列 尾節點插入
- 兩個連結串列的第一個公共節點
- K個節點翻轉連結串列
- 劍指 Offer 25. 合併兩個排序的連結串列 JavaScript實現排序JavaScript
- 【連結串列問題】打卡2:刪除單連結串列的第 K個節點
- 兩個連結串列的第一個公共結點
- 劍指 Offer 35. 複雜連結串列的複製
- 【連結串列問題】打卡3:刪除單連結串列的中間節點
- 1019. 連結串列中的下一個更大節點
- 【連結串列問題】打卡8:複製含有隨機指標節點的連結串列隨機指標
- 2024/11/27 【連結串列】LeetCode 24 兩兩交換連結串列中的節點 & LeetCode 19 刪除連結串列的倒數第N個節點LeetCode
- Day4(連結串列)|24. 兩兩交換連結串列中的節點 & 19.刪除連結串列的倒數第N個節點 & 面試題 02.07. 連結串列相交 &142.環形連結串列II面試題
- [程式設計題]從尾到頭列印連結串列 牛客網練習 java遞迴程式設計Java遞迴
- 【連結串列問題】刪除單連結串列的中間節點
- 劍指offer:刪去連結串列中重複的節點。(題解原始碼加圖解)原始碼圖解