剑指offerpython_《剑指offer》3. 从尾到头打印单链表值【Java+Python】

从尾到头打印单链表值

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 printListFromTailToHead(ListNode listNode) {

ArrayList res = new ArrayList();

if (listNode == null){

return res;

}

while(listNode != null){

res.add(listNode.val);

listNode = listNode.next;

}

ArrayList 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 printListFromTailToHead(ListNode listNode) {

// 使用栈结构实现

ArrayList res = new ArrayList();

if (listNode == null){

return res;

}

Stack 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 = node2

node2.next = node3

singleNode = ListNode(12)

test = ListNode()

S = Solution()

print(S.printListFromTailToHead2(node1))

print(S.printListFromTailToHead2(test))

print(S.printListFromTailToHead2(singleNode))如果您觉得本文有用,请点个“在看”

1460000023642722

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值