题解 | #从尾到头打印链表#

从尾到头打印链表

http://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035

c++三种解法

顺序输入再反转

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> ans;
        while(head){
            ans.push_back(head->val);
            head=head->next;
        }
        //可以直接使用库函数reverse()
        int tmp=0;
        for(int i=0;i<ans.size()/2;i++){
            tmp=ans[i];
            ans[i]=ans[ans.size()-1-i];
            ans[ans.size()-1-i]=tmp;
        }
        return ans;
    }
};

利用递归实现栈的效果来反转

class Solution {
public:

    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> ans;
        if(!head) return ans;
        ans=printListFromTailToHead(head->next);
        ans.push_back(head->val);
        return ans;
    }
};

先判断终止条件,然后处理当前节点:将本节点结果放在上一个节点结果的后面。

反转链表再输出

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        ListNode* pre=NULL;
        ListNode* cur=head;
        ListNode* tmp;
        while(cur){
            tmp=cur->next;
            cur->next=pre;
            pre=cur;
            cur=tmp;
        }
        vector<int> ans;
        while(pre){
            ans.push_back(pre->val);
            pre=pre->next;
        }
        return ans;
    }
};

反转链表需要三个节点:前一个,当前的,以及用来保护现场的临时节点。

全部评论

相关推荐

DKS233:(1)专业技能:Java8也太旧了,最少也要了解到JDK17吧,可以参考现在SpringBoot支持的Java最低版本,熟悉mysql基本理论具体指啥,是锁这种具体原理还是分库分表这些业务场景,spring这些专业词汇,大小写要写对(全篇简历都有这个问题,显得不严谨),熟悉使用框架进行业务开发就别写了,如果要写,起码要写到框架原理部分吧,比如aop,启动原理什么的,springcloud具体指哪些模块呢,写清楚,网关还是鉴权还是什么,“改造”没必要写吧,你直接说用springcloud开发的不就行了(2)项目经历:首先格式就有大问题,时间怎么能换行呢,调整一下,响应速度那个,如果指的是将部分数据从其他数据库转到redis的提升就别写了,因为这个不算难点,redis可以写写分布式这些,比如容灾怎么实现的,数据库同步怎么做的
点赞 评论 收藏
分享
昨天 14:00
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务