從頭到尾打印鏈表

題目描述

輸入一個鏈表,從尾到頭打印鏈表每個節點的值

編程思路

 1.用遞歸實現
要實現反過來輸出鏈表,所以每訪問到一個結點的時候,先遞歸輸出它後面的結點,再輸出該結點自身。
2.用棧實現
   先要遍歷一遍鏈表,遍歷的順序是從從頭到尾,而輸出的順序是從尾到頭,也就是第一個遍歷的結點最後後一個輸出,最後一個遍歷的結點第一個輸出,即滿足棧的”先進後出“。所以用棧實現,每經過一個結點的時候,把該結點放到一個棧中,當遍歷完整個鏈表後,再從棧頂開始逐個輸出結點的值。

程序代碼(Java語言)

1.用遞歸實現
import java.util.ArrayList;

class ListNode {
     int val;
     ListNode next = null;  
     ListNode(int val) {
   		 this.val = val;
     }
}
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;
    }
}

2.用棧實現
import java.util.ArrayList;
import java.util.Stack;

class ListNode {
     int val;
     ListNode next = null;  
     ListNode(int val) {
   		 this.val = val;
     }
}

public class Solution {
	public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
		Stack<Integer> stack = new Stack<Integer>();
		while(listNode != null) {
			stack.push(listNode.val);
			listNode = listNode.next;
		}
		ArrayList<Integer> arraylist = new ArrayList<Integer>();
		while(!stack.isEmpty()) {
			arraylist.add(stack.pop());
		}
		return arraylist;
	}
}



發佈了35 篇原創文章 · 獲贊 2 · 訪問量 7400
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章