从头到尾打印链表
题目描述
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
代码格式要求
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
}
}
解题一
1.思路:调用一个函数
ArrayList的add(index,value),可以指定index位置插入value,所以在遍历ListNode的同时,将值插入到index=0的位置上,这样就可以反向输出。
2.代码
package jianzhi_offer;
import java.util.ArrayList;
public class Solution3_1 {
/**
* 输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
* @param listNode
* 非递归的方法
*/
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
ListNode tmp = listNode;
while(tmp!=null){
list.add(0,tmp.val);
tmp = tmp.next;
}
return list;
}
//测试
public static void main(String[] args) {
ListNode listNode1 = new ListNode(1);
ListNode listNode2 = new ListNode(2);
ListNode listNode3 = new ListNode(3);
ListNode listNode4 = new ListNode(4);
ListNode listNode5 = new ListNode(5);
ListNode listNode6 = new ListNode(6);
listNode1.next = listNode2;
listNode2.next = listNode3;
listNode3.next = listNode4;
listNode4.next = listNode5;
listNode5.next = listNode6;
ArrayList <Integer> arr = printListFromTailToHead(listNode1);
System.out.println(arr);
}
}
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
3.复杂度
时间复杂度:O(n)
空间复杂度:O(n)
解题二
1.思路
运用递归实现
2.代码
import java.util.ArrayList;
public class Solution3_2 {
ArrayList<Integer> list = new ArrayList();
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
if(listNode!=null){
printListFromTailToHead(listNode.next);
list.add(listNode.val);
}
return list;
}
}
3.复杂度
时间复杂度:O(n)
空间复杂度:O(n)
解题三(*)
1.思路
根据题意要求从尾到头的顺序,ListNode是链表,只能从头遍历到尾,所以考虑用栈的思想。
2.代码
package jianzhi_offer;
import java.util.ArrayList;
import java.util.Stack;
public class Solution3_3 {
//运用栈的思想
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> list = new ArrayList<>();
Stack<Integer> stack = new Stack<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
while (!stack.empty()) {
list.add(stack.pop());
}
return list;
}
}
网友评论