LeetCode(206)反转链表
今天要练习的题目是:力扣(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 许可协议。转载请注明来源 呆萌's Blog!
评论












