每日一题——剑指 Offer24反转链表

如果您是第一次看我写的博客,可以给我点个赞并关注我吗,我会持续分享更多有意思的干货。

1 题目

剑指 Offer 24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。

示例:

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

限制:

0 <= 节点个数 <= 5000

2 思路

最开始我是想尝试用头插法的思路,把数据从原有的链表中读取出来后用头插法放入一个新链表中。但是我犯了一个错误,原题意没有头结点!所以头插法在没有头结点的情况下就显得有点无奈了。

为此在网上翻阅步骤后,我学到了一个小窍门,即无需创建一个新的链表,在原有链表的基础上,我们可以改动原来链表指针的朝向即可。

206_反转链表.png

既然有了思路,我们立马动手吧!

3 代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* reverseList(ListNode* head) {
        ListNode * cur = head;
        ListNode * pre = NULL;
        ListNode * Temp = NULL;
        while(cur != NULL)
        {
            Temp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = Temp;
            
        }
        return pre;
    }
};

4 小结

实际上,如果在最后的题意中能够把head指向逆置链表的首元节点就更完美了。对于这道题的解法来说时间复杂度是O(n),空间复杂度是O(1),其花的时间主要用于遍历上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ArimaMisaki

如果知识有用请我喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值