本文主要是介绍剑指offer__02__输入一个链表,从尾到头打印链表每个节点的值。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解题思路一:
翻转链表,然后打印,但是这样改变原来的链表
import java.util.ArrayList;
public class Solution {public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {if (listNode == null)return new ArrayList<Integer>();//翻转链表,需要空间复杂度为 O(1)ArrayList<Integer> result = new ArrayList<>();ListNode tail = new ListNode(0);tail.next = null;ListNode currentNode = listNode;while (listNode != null) {currentNode = listNode;listNode = listNode.next;currentNode.next = tail;tail = currentNode;}while (currentNode.next != null) {result.add(currentNode.val);currentNode = currentNode.next;}return result;}
}
解题思路二
使用递归 ,优点是不改变原来链表的结构,但是空间复杂度高,需要O(n)
import java.util.ArrayList;
public class Solution {public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {if (listNode == null) {return new ArrayList<Integer>();}ArrayList<Integer> res = new ArrayList<>();printList(res, listNode);return res;}public void printList(ArrayList<Integer> list, ListNode listNode) {if (listNode.next == null){list.add(listNode.val);return;}printList(list, listNode.next);list.add(listNode.val);}
}
这篇关于剑指offer__02__输入一个链表,从尾到头打印链表每个节点的值。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!