LeetCode(206)反转链表
今天是小呆刷题的第6天,今天的题目是:力扣(LeetCode)的第206题,反转链表
题目要求
给你单链表的头节点
head
,请你反转链表,并返回反转后的链表。
示例:
1 |
|
提示:
- 链表中节点的数目范围是
[0, 5000]
-5000 <= Node.val <= 5000
解题思路
关于链表和数组的题目,小呆还是优先考虑是否可以用双指针算法解决,毕竟最近刷的几道题都与双指针有关。由于链表之间是由next
相连,所以反转链表其实就是把next
的指向反转。那如何将next
指向反转的呢?一共有3步:
- 链表的尾部节点的
next
一定指向null,所以我们初始化两个指针prev
,curr
,让其一个指向null
,一个指向链表头head
- 进入循环,终止条件为
curr !== null
表示链表已经循环完毕 - 由于反转
next
会断掉当前链表,所以创建一个临时变量next
,指向curr.next
,防止反转next
找不到路 - 将
curr.next
指向prev
,然后将prev
指向curr
,最后将curr
指向next
- 最后返回
prev
,链接就反转完成了
老规矩一张动态gif图辅助理解代码:
1 |
|
小结
其实可以发现,只要巧妙的利用已经学会的算法,稍加变通,就可以解出问题。加油加油加油!
引用
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小呆&小萌的情侣博客!
评论