其他分享
首页 > 其他分享> > 【数据结构】链表:JZ-6.从尾到头打印链表

【数据结构】链表:JZ-6.从尾到头打印链表

作者:互联网

写在开始 从今天开始刷牛客网的剑指offer

 

因为:https://leetcode-cn.com/circle/article/s3RcOW/   所以:我们不能在自己的 IDE 上刷题

刷题平台: https://www.nowcoder.com/ta/coding-interviews

解题思路:https://zhuanlan.zhihu.com/p/112990684

描述

输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。   如输入{1,2,3}的链表如下图: 返回一个数组为[3,2,1]   0 <= 链表长度 <= 10000
输入:{1,2,3}
返回值:[3,2,1]

 

数据结构:链表

算法:递归

递归的思路就是遍历链表时,每次访问一个节点后,直接递归输出它的后面节点,再输出自己本身。也可以满足题意。不过递归的本质就是一个栈结构,原理都差不多。但是这样的话,当链表长度很长的时候,递归的层数就会变得很深,这时执行的效果就会不好。

【Python】

1.栈

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        lst,lst_bak = [],[]
        if not listNode:
            return lst
        while listNode:
            lst.append(listNode.val)
            listNode = listNode.next
        while lst:
            lst_bak.append(lst.pop())
        return lst_bak

2.递归解法

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution: 
# 返回从尾部到头部的列表值序列,例如[1,2,3] 
    def printListFromTailToHead(self, listNode): 
        if listNode is None: 
            return [] 
        return self.printListFromTailToHead(listNode.next) + [listNode.val]

3.用reverse和append

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        l = []
        while listNode:
            l.append(listNode.val)
            listNode = listNode.next
        l.reverse()
        return l

4.insert,insert的index表示插在这个index的后面

# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        l = []
        while listNode:
            l.insert(0, listNode.val)
            listNode = listNode.next
        return l

 

穿插一个python ListNode 链表的小知识:

struct ListNode {
       int val;    //定义val变量值,存储节点值
       struct ListNode *next;   //定义next指针,指向下一个节点,维持节点连接
  }

 

 

 

 

 

【Java】

1.递归解法

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;
    }
}  

 

 

 

 

标签:listNode,val,JZ,self,next,链表,从尾,节点
来源: https://www.cnblogs.com/chenxiaomeng/p/15909001.html