从尾到头打印单链表值
1. 题目形容
输出一个链表,按链表从尾到头的程序返回一个ArrayList。
2. 示例
无
3. 解题思路
此题比较简单
第一种办法:应用数组。先从头到尾读取链表数据,保留到一个数组a中。因为要获取从尾到头数据,新开一个数组b,从数组a尾部到头部开始读取,保留到数组b中。
第二种办法:应用栈。先从头到尾读取链表数据,保留到一个栈a中。利用栈先进后出的性质,pop到数组a中。
4. Java实现
办法一:应用数组
/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;* }* }**/import java.util.ArrayList;public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> res = new ArrayList(); if (listNode == null){ return res; } while(listNode != null){ res.add(listNode.val); listNode = listNode.next; } ArrayList<Integer> ress = new ArrayList(); for(int i = res.size()-1; i >= 0; i--){ ress.add(res.get(i)); } return ress; }}
办法二:应用栈
/*** 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) { // 应用栈构造实现 ArrayList<Integer> res = new ArrayList(); if (listNode == null){ return res; } Stack<Integer> stack = new Stack(); while (listNode != null){ stack.push(listNode.val); listNode = listNode.next; } while (!stack.isEmpty()){ res.add(stack.pop()); } return res; }}
5. Python实现
第一种办法应用栈第二种间接数组头插法,代码简洁,然而复杂度较高
# 从尾到头顺次打印单链表的值# 从尾到头顺次打印单链表的值class ListNode: def __init__(self, x=None): self.val = x self.next = None class Solution: def printListFromTailToHead(self, listNode): if not listNode: #如果头部结点为空 return stack = [] while listNode: stack.append(listNode.val) listNode = listNode.next while stack: print(stack.pop())# return sorted(stack, reverse=True) def printListFromTailToHead2(self, listNode): if not listNode: return li = [] while listNode: li.insert(0, listNode.val) listNode = listNode.next return li node1 = ListNode(10)node2 = ListNode(11)node3 = ListNode(13)node1.next = node2node2.next = node3 singleNode = ListNode(12) test = ListNode() S = Solution()print(S.printListFromTailToHead2(node1))print(S.printListFromTailToHead2(test))print(S.printListFromTailToHead2(singleNode))
如果您感觉本文有用,请点个“在看”