牛客网刷题之剑指offer:从尾到头打印链表

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

题目地址
题目描述:
题目描述


一、看到题目该如何下手?

首先,本题是要求倒叙的打印一个链表,最常规的想法,可能是先把链表原地倒置,但是在遍历打印。的确是这样的,思路可以顺着这个来,我们是否可以想到其他的方法呢?

此题还可以联想到栈,先进后出,那就可以将链表先一次押入到栈中,然后在依次从栈顶弹出给一个新链表。

二、根据思路编写代码

考虑 到可能语言的问题,此代码用python和c++两种语言给大家展示。

1.python(2.7)代码

python2与python3还是有些区别的,大家可以自行百度查看区别,大部分都是一样的。

代码如下:

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

class Solution:
    def printListFromTailToHead(self, listNode):
        result = [] #一个空list,python中没有栈这种结构,可以模拟一个
        while listNode:
            result.insert(0,listNode.val)#每次都将数据插入到列表的第一个数据
            listNode = listNode.next#链表后移
        return result#返回最终的结果
        # write code here

2.C++11(clang++3.9)代码

至于C++11或者C++14、C++19等,大家也可以自行百度查看
代码如下:

/**
*  struct ListNode {
*        int val;
*        struct ListNode *next;
*        ListNode(int x) :
*              val(x), next(NULL) {
*        }
*  };
*/
class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> new_link;
        ListNode *p = NULL;
        p = head;//移动指针
        stack<int> stack1;//一个栈
        while(p!=NULL){//当p不空的时候,依次将值押入栈中。
            stack1.push(p->val);
            p = p->next;
        }
        while(!stack1.empty()){//当栈非空时,将数据从栈顶依次push新的vector容器中
            new_link.push_back(stack1.top());//将栈顶押入容器中
            stack1.pop();//栈顶出栈
        }
        return new_link;//返回最终结果
    }
};

三、总结

提示:本题思维并非唯一,还有其他的做法,欢迎大家在评论区讨论交流,关于链表的一些操作也是面试和机考的常考题型,大家要多思考,多总结。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值