zoukankan      html  css  js  c++  java
  • 剑指offer:链表逆序输出

    //第一反应想到的

    利用栈的特性:

    class Solution {
    public:
        vector<int> printListFromTailToHead(ListNode* head) {
            vector<int> value;
            ListNode *p=NULL;
            p=head;
            stack<int> stk;
            while(p!=NULL){
                stk.push(p->val);
                p=p->next;
            }
            while(!stk.empty()){
                value.push_back(stk.top());
                stk.pop();
            }
            return value;
        }
    };

    递归写法:  //第二种想到的。。

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

    这个没有考虑..感觉操作次数偏多,影响效率.看到别人的题解学习一下思路

    第三种:数组翻转

    链接:https://www.nowcoder.com/questionTerminal/d0267f7f55b3412ba93bd35cfa8e8035?f=discussion
    来源:牛客网
    
    class Solution {
    public:
        vector<int> printListFromTailToHead(ListNode* head) {
            vector<int> value;
            ListNode *p=NULL;
            p=head;
            while(p!=NULL){
                value.push_back(p->val);
                p=p->next;
            }
            //reverse(value.begin(),value.end()); //C++自带的翻转函数
            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;
        }
    };
  • 相关阅读:
    mysql-四舍五入
    数据库基础
    大白话五种IO模型
    Python程序中的协程操作-gevent模块
    Python程序中的协程操作-greenlet模块
    协程基础
    Python程序中的线程操作-concurrent模块
    Python程序中的线程操作-线程队列
    Python程序中的线程操作-锁
    Python程序中的线程操作-守护线程
  • 原文地址:https://www.cnblogs.com/BillowJ/p/12669664.html
Copyright © 2011-2022 走看看