首页 > 试题广场 > 从尾到头打印链表
[编程题]从尾到头打印链表
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

62个回答

添加回答
推荐
方法一:链表从尾到头输出,利用递归实现,不使用库函数直接printf输出的时候用递归比较好
/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(struct ListNode* head) {
        vector<int> value;
        if(head != NULL)
        {
            value.insert(value.begin(),head->val);
            if(head->next != NULL)
            {
                vector<int> tempVec = printListFromTailToHead(head->next);
                if(tempVec.size()>0)
                value.insert(value.begin(),tempVec.begin(),tempVec.end());  
            }         
            
        }
        return value;
    }
};
方法二:用库函数,每次扫描一个节点,将该结点数据存入vector中,如果该节点有下一节点,将下一节点数据直接插入vector最前面,直至遍历完,或者直接加在最后,最后调用reverse
/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(struct ListNode* head) {
        vector<int> value;
        if(head != NULL)
        {
            value.insert(value.begin(),head->val);
            while(head->next != NULL)
            {
                value.insert(value.begin(),head->next->val);
                head = head->next;
            }         
            
        }
        return value;
    }
};

编辑于 2015-06-18 16:53:34 回复(59)
python
# -*- 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
        res=[]
        while listNode:
            res.append(listNode.val)
            listNode=listNode.next
        return res[::-1]

发表于 2019-03-21 22:42:45 回复(0)
从头至尾将队列节点的值拿出来,然后倒一下
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        arr = []
        while listNode:
            arr.append(listNode.val)
            listNode = listNode.next
        return arr[::-1]

发表于 2019-03-18 09:28:47 回复(0)
python :
# -*- 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
        list = []
        while listNode != None:
            temp = listNode.val
            list.append(temp)
            listNode = listNode.next 
        list.reverse()
        return list
但是不知道下面这样写为什么通不过,,小白求大神指导
class Solution: # 返回从尾部到头部的列表值序列,例如[1,2,3]  def printListFromTailToHead(self, listNode): # write code here  list = []
        list_new = [] while listNode != None:
            temp = listNode.val
            list.append(temp)
            listNode = listNode.next for i in range(len(list)):
            list_new = list.pop() return list_new








发表于 2019-03-16 16:31:44 回复(0)

先逆转链表,再遍历

class Solution:  # 返回从尾部到头部的列表值序列,例如[1,2,3]  def printListFromTailToHead(self, listNode):  # write code here   # invert listNode  head = None   p = listNode  while p:  q = p.next   r = head
            head = p
            head.next = r
            p = q # travel  a = []
        h = head while h:  a.append(h.val)
            h = h.next   return a

发表于 2019-03-12 14:40:53 回复(0)
# -*- 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
        list = []
        while(listNode != None):
            list.append(listNode.val)
            listNode = listNode.next
        return list[::-1]
发表于 2019-03-06 22:32:18 回复(0)
def printListFromTailToHead(self, listNode):
        p = listNode
        list = []
        while p:
            list.append(p.val)
            p = p.next
        list.reverse()
        return list
发表于 2019-02-28 16:21:07 回复(0)
Attention:
Consider the NULL case.


# -*- 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:
            x = listNode
            array = [x.val]
            while x.next != None:
                x = x.next
                array += [x.val]
            return array[::-1]
        else:
            return []
发表于 2019-02-12 00:15:18 回复(0)
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#思路1
# 1.先遍历链表元素到栈
# 2.栈再弹出
 
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        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
    #运行时间:22ms
    #占用内存:5632k


#思路3 先遍历,再反转
#class Solution:
#    def printListFromTailToHead(self,listNode):
#        l = []
#        if not listNode:
#            return l
#        while listNode:
#            l.append(listNode.val)
#            listNode = listNode.next
#        return l[::-1]
    #运行时间:21ms
    #占用内存:5852k


#思路2  递归
#class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
#    def printListFromTailToHead(self, listNode):
        # write code here
#        if listNode is None:
#         return []
#        return self.printListFromTailToHead(listNode.next) + [listNode.val]
    #运行时间:34ms
    #占用内存:5728k


发表于 2019-01-18 21:10:47 回复(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):
        # write code here
        list_n = []
        while listNode!=None:
            list_n.append(listNode.val)
            listNode = listNode.next
        list_n.reverse()
        return list_n
这里用的是python代码写的,正序遍历一遍链表,然后用了内置函数reverse()逆序输出
发表于 2018-12-09 19:07:42 回复(0)
# -*- 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]
栈:
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
发表于 2018-11-13 23:38:52 回复(0)
# -*- 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
        list=[]
        ptr = listNode
        while ptr != None:
            list.append(ptr.val)
            ptr = ptr.next # 将ptr往下一个元素移
            
        return list[::-1]
发表于 2018-11-13 10:00:12 回复(0)
 class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        l = []
        while listNode is not None :
            l.insert(0,listNode.val)
            listNode = listNode.next
        return l
python应该是最简单的了。。。。完全不用考虑先进先出 先进后出  直接insert就行了。。。
发表于 2018-11-01 15:12:32 回复(0)
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        res = []
        tmp = listNode
        while tmp:
            res.insert(0, tmp.val)
            tmp = tmp.next
        return res
我的垃圾代码,像坨💩
发表于 2018-10-14 20:39:01 回复(0)

Method 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):
        # write code here
        if listNode is None:
            return []
        resList = []
        ptr = listNode
        while ptr is not None:
            resList.append(ptr.val)
            ptr = ptr.next
        return resList[::-1]

Method 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):
        # write code here
        if listNode is None:
            return []
        # 先通过遍历计算链表长度
        length = 0
        ptr = listNode
        while ptr is not None:
            length += 1
            ptr = ptr.next
        resList = [0] * length
        # 再遍历,获取各个节点的值,反向存入resList中
        ptr = listNode
        count = 1
        while ptr is not None:
            resList[length-count] = ptr.val
            ptr = ptr.next
            count += 1
        return resList
编辑于 2018-10-11 15:00:54 回复(0)
请教一个问题:
为什么写
if listNode.val == None:
    return []
会报错

而这样写则正确:
if listNode is None:
    return []

发表于 2018-10-11 11:55:05 回复(0)
# -*- 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
        list=[]
        temp = listNode
        while temp:
            list.append(temp.val)
            temp=temp.next
        list.reverse()
        return list


发表于 2018-10-08 13:45:03 回复(0)
# -*- coding:utf-8 -*-
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        l = list()
        if not listNode:
            return l
        while listNode:
            l.append(listNode.val)
            listNode = listNode.next
        
        return l[::-1]
先存进一个list,再切片
发表于 2018-09-18 22:47:02 回复(0)
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        li=[]
        while listNode!=None:
            li.append(listNode.val)
            listNode=listNode.next
        return li[::-1]
感觉用python好赖皮,一堆自建函数可以用,哈哈

发表于 2018-09-11 21:23:50 回复(0)
# -*- 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
        res = []
        if listNode is None:
            return res
        while listNode is not None:
            res.append(listNode.val)
            listNode = listNode.next
        return res[::-1]
发表于 2018-09-02 10:26:50 回复(0)
class Solution:
    # 返回从尾部到头部的列表值序列,例如[1,2,3]
    def printListFromTailToHead(self, listNode):
        # write code here
        if listNode is None:
            return []
        a=[]
        while(listNode is not None):
            a.append(listNode.val)
            listNode=listNode.next
        return a[-1::-1]

发表于 2018-08-27 18:35:50 回复(0)

扫一扫,把题目装进口袋

牛客网,程序员必备求职神器

扫描二维码,进入QQ群

扫描二维码,关注牛客网公众号

  • 公司地址:北京市朝阳区大屯路东金泉时代3-2708北京牛客科技有限公司
  • 联系方式:010-60728802(电话) admin@nowcoder.com
  • 牛客科技©2018 All rights reserved
  • 京ICP备14055008号-4
  • 京公网安备 11010502036488号