逆序打印单链表(四种解法)

题目描述

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。

链表的结构


  struct ListNode {
        int val;
       struct ListNode *next;
       ListNode(int x) :
           val(x), next(NULL) {
       }
 };

1.利用栈的特性

class Solution {
public:    
    vector<int> printListFromTailToHead(ListNode* head) 
    {
        
        stack<int> s ;
        vector<int> v;
         if(nullptr == head)
            return v;
       
        ListNode* cur = head;
        while(cur)
        {
            s.push(cur->val);
            cur = cur -> next;
        }
        while(!s.empty())
        {
            v.push_back(s.top());
            s.pop();
        }
        return v;
    }
};

2.利用递归

class Solution {
public:   
    vector<int> printListFromTailToHead(ListNode* head) 
    {
        vector<int> v;
         if(nullptr == head)
            return v; 
          v = printListFromTailToHead(head->next);
          v.push_back(head->val); 
        return v;  
    }
};

3.利用数组

class Solution {
public:     
    vector<int> printListFromTailToHead(ListNode* head) 
    {        
        vector<int> v;
        if(head == nullptr)
            return v;  
        ListNode* cur = head;
        while(cur)
        {
            v.push_back(cur->val);
            cur = cur->next;
        }
       // reverse(v.begin(),v.end()); //也可以用STL直接提供的反转函数
       int temp=0;      
       int i=0,j=value.size()-1;    
        while(i<j)
        {         
           temp=value[i];    //也可以用swap函数,swap(value[i],value[j]); 
           value[i]=value[j];        
            value[j]=temp;        
                i++;          
                j--;   
           }      
        return value;
    }
};

4.利用反向迭代器

class Solution {
public:
      
    vector<int> printListFromTailToHead(ListNode* head) 
    {
       
        vector<int> v;
        if(head == nullptr)
            return v;  
        ListNode* cur = head;
        while(cur)
        {
            v.push_back(cur->val);
            cur = cur->next;
        }
         return vector<int>(v.rbegin(), v.rend());
    }
};

<stron>:逆序打印单链表</stron>

全部评论

相关推荐

10-23 16:33
门头沟学院 Java
本人某中9本科,成绩中等,目前没科研没实习,目前后端学到了javaWeb,开始没定好方向,在学国外课程,走工程路线起步有点晚了,到这个时间点了还在学JavaWeb,顿感迷茫,不知道是坚持走下去还是寒假去准备考研。考研这个路弄得我还是心痒痒的,因为从众考研的人也不在少数,所以会有这方面的心理安慰吧,就是“不行我可以去考研啊”,而且意味着三年的缓冲,为了复试还有积攒经验美化简历,其实现在也可以去申入实验室打杂;就业可能意味着多些工作经验,工程岗应该到后面还是经验大于学历?还是有点迷茫了,求助好心人有无路线启发
千千倩倩:同27给点建议,现在这个时间点可以快速看完外卖和点评,不用跟着敲,但一定要在看的时候总结每个部分的整个业务流程,对其中的实现有一个大概的印象。然后直接开始看八股,刷算法。八股和算法最好还是在项目学习中穿插着看。如果计算机基础,算法这些基础好,加上每天刻苦学习,两周可以达到勉强能面试的水平,到时候就直接海投中小厂,在约面和面试的过程中不断巩固知识。没找到实习也没关系,就当积累经验。再沉淀一波直接明年三月开始投暑期,毕竟是9本,总是有面试机会的,只要你这三个月不懈怠,面试发挥得一定不错,只要拿到一个中,大厂暑期实习,秋招就有竞争力了。总得而言,现在还有机会,但是时间非常紧张,需要你结合自己情况考虑,共勉
你会选择考研还是直接就业
点赞 评论 收藏
分享
10-02 19:29
已编辑
浙江科技大学 运营
点赞 评论 收藏
分享
09-08 17:17
同济大学 Java
狗不理fe:里面的人劝一句,别来虾,我们部门24校招生淘汰率30%,还有一些人说有一年保护期,不可能!!!
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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