算法热门:反转单链表(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)解法二的主要内容,如果未能解决你的问题,请参考以下文章