《剑指offer》面试题06. 从尾到头打印链表

问题描述

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。
示例 1:
输入:head = [1,3,2]
输出:[2,3,1]
限制:
0 <= 链表长度 <= 10000

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> reversePrint(ListNode* head) {
        int len = 0;
        ListNode* tmp = head;
        while(tmp)
        {
            tmp = tmp->next;
            ++len;
        }
        vector<int> ans(len);
        while(head)
        {
            ans[--len] = head->val;
            head = head->next;
        }
        return ans;
    }
};

结果

执行用时 :8 ms, 在所有 C++ 提交中击败了66.47%的用户
内存消耗 :8.8 MB, 在所有 C++ 提交中击败了100.00%的用户

代码2

使用栈结构

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> reversePrint(ListNode* head) {
        int len = 0,i=0;
        ListNode* tmp = head;
        stack<int> st;
        while(tmp)
        {
            st.push(tmp->val);
            tmp = tmp->next;
            ++len;
        }
        vector<int> ans(len);
        while(!st.empty())
        {
            ans[i++] = st.top();
            st.pop();
        }
        return ans;
    }
};

结果:

执行用时 :16 ms, 在所有 C++ 提交中击败了16.78%的用户
内存消耗 :8.8 MB, 在所有 C++ 提交中击败了100.00%的用户
posted @ 2020-04-09 15:18  曲径通霄  阅读(134)  评论(0编辑  收藏  举报