题解

解法1:栈

利用栈后进先出的特点,只需要遍历一次链表,然后将栈内元素依次弹出即可。
代码:

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        stack<int> st;

        vector<int> ans;

        if(head == nullptr)
            return ans;
        while(head)
        {
            st.push(head->val);
            head = head->next;
        }
        while(!st.empty())
        {
            ans.push_back(st.top());
            st.pop();
        }
        return ans;
    }
};

解法2:常规做法

遍历一次链表,每个元素直接加入到vector中,然后翻转vector即可
代码:

class Solution {
public:
    vector<int> printListFromTailToHead(ListNode* head) {
        vector<int> ans;
        ans.clear();
        ListNode* now = head;

        while(now)
        {
            ans.push_back(now->val);
            now = now->next;
        }
        reverse(ans.begin(), ans.end());

        return ans;
    }
};

解法3:翻转链表

将链表翻转以后再进行一次遍历即可,翻转链表最简单的做法就是对原链表进行一次头插法遍历
例如1->2->3 将2重新头插得到2->1->3 再将3重新头插得到3->2->1
这种做法会改变原链表,故不在此实现了

最后,三种做法的时间复杂度都是, 空间复杂度都是

全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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