從尾到頭列印連結串列(java版)
阿新 • • 發佈:2019-01-01
【題目描述】輸入一個連結串列,從尾到頭列印連結串列每個節點的值。
【解題思路1】
//1. 遍歷連結串列,使用一個ArrayList儲存各個連結串列結點。
//2. 將ArrayList關於對稱中心,進行翻轉。得到的ArrayList即為從尾到頭列印的順序。
//實現一
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> arr = new ArrayList<Integer>();
if(listNode == null){
return arr;
}
while(listNode.next != null){
arr.add(listNode.val);
listNode = listNode.next;
}
arr.add(listNode.val);
int temp = 0;
for(int inx=0, end=arr.size()-1 ; inx<end; inx++, end--){
temp = arr.get(inx);
arr.set(inx, arr.get(end));
arr.set(end, temp);
}
return arr;
}
}
//實現二
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);//使用Collections的reverse方法,直接將list反轉
return list;
}
}
【解題思路2】
//1. 利用遞迴遍歷連結串列
//2. 得到的即為所求,從尾到頭的序列。
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】
//1. 遍歷連結串列,從頭結點開始,依次入棧。
//2. 棧不空的情況下,依次彈出棧頂元素,存入ArrayList中,返回從尾到頭的連結串列序列。
import java.util.ArrayList;
import java.util.Stack;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
Stack<Integer> s = new Stack<Integer>();
ArrayList<Integer> arr = new ArrayList<Integer>();
if(listNode == null){
return arr;
}
while(listNode.next !=null){
s.push(listNode.val);
listNode = listNode.next;
}
s.push(listNode.val);
while(!s.empty()){
arr.add(s.pop());
}
return arr;
}
}