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

举报
ArimaMisaki 发表于 2022/08/09 00:29:52 2022/08/09
【摘要】 如果您是第一次看我写的博客,可以给我点个赞并关注我吗,我会持续分享更多有意思的干货。 文章目录 1 题目2 思路3 代码4 小结 1 题目 剑指 Offer 24. 反转链...

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

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;
    }
};

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

4 小结

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

文章来源: blog.csdn.net,作者:ArimaMisaki,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/chengyuhaomei520/article/details/122927013

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。