剑指 Offer 06. 从尾到头打印链表【难度:简单】(链表翻转)

题目链接

https://leetcode.cn/problems/cong-wei-dao-tou-da-yin-lian-biao-lcof/

思路

非常经典的单向链表翻转。

思路就是固定原来的头结点init_head,把init_head后面的结点依次移动到链表首部,直到init_head后面没有结点,即init_head变成了链表尾部。

代码

/**
 * 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) {
        vector<int> v;
        if(head==nullptr)return v; // 边界特判
        ListNode *init_head=head; // 最开始的头结点head,最终会变成尾结点
        // 就地逆置链表,循环将每个init_head->next移动到首部,直到init_head->next为空
        while(init_head->next!=nullptr){
            ListNode* tmp=init_head->next; // tmp暂存要移动到首部的结点
            init_head->next=tmp->next; // 将tmp从链表中去掉
            tmp->next=head; // 将tmp放在头结点前面
            head=tmp; // 更新头结点为tmp
        }
        // 遍历翻转后的链表,将其放入vector
        ListNode* p=head;
        while(p!=nullptr){
            v.push_back(p->val);
            p=p->next;
        }
        return v;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nefu-ljw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值