算法热门:反转单链表(LeetCode 206)解法二

Posted 白龙码~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法热门:反转单链表(LeetCode 206)解法二相关的知识,希望对你有一定的参考价值。

解法一在我的上一篇博客里,有兴趣的同学可以先去康康;
贴出链接——反转单链表:解法一

Here we go

老规矩哈,先看题目——
在这里插入图片描述
我们即将给出的解法二也是相对直观的一种,下面先从链表的实现开始思考;

思考

step 1

我么在实现各种链表相关接口的时候写过头插与头删,尾插与尾删,那么如果说我们从当前链表的头结点开始,将每一个结点头插到一个新建立的链表当中,如此循环往复直到旧的链表的最后一个,也就是NULL之前的tail结点被头插到新链表,最后返回新链表的头指针,那么我们的工作就结束了;

step 2

将以上的解题思路转换成更直观的图像过程——
在这里插入图片描述
这是我们当前要反转的链表,我们首先要取下头指针,也就是1,然后将它作为头,头插到一个新链表中——
在这里插入图片描述
然后->
在这里插入图片描述
在这里插入图片描述
这样,我们的工作就完成啦

step 3

思路明白,代码实现:

struct ListNode* reverseList(struct ListNode* head)
{
    struct ListNode* newhead=NULL,*cur=head;
    while(cur)
    {
        struct ListNode* next=cur->next;
        cur->next=newhead;
        newhead=cur;
        cur=next;
    }
    return newhead;
}

小结一下

相较于三指针的方法,这个取头结点直接头插构成新链表的方法比较好懂,相比较之下也没有那么复杂,不过带来的问题就是有内存上的消耗,不过换来效率上的提升,这点消耗还是赚的,而且在当下,内存已经大的离谱啦~

创作不易,留个点赞评论再走吧~关注博主,分享更多学习、刷题经验

以上是关于算法热门:反转单链表(LeetCode 206)解法二的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 206 反转一个单链表

Leetcode练习(Python):链表类:第206题:反转链表:反转一个单链表。

算法-206. 反转链表

[LeetCode] 206. 反转链表

LeetCode206.反转链表

LeetCode206. 反转链表