【Golang 刷题之路】转世重修第二百零六题:反转链表
Golang轻松学习一、两数相加?
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
二、详细代码
1.理清题目思路
- 要求是什么?我们需要将链表反转
链表:通过指针互相连接 - 条件是什么?链表需依照顺序进行头尾互换
- 优化是什么?依托于另一个链表不断将节点存入
2.代码思路,带注释
代码如下(示例):
func reverseList(head *ListNode) *ListNode {
// 声明另一个链表 m
var m *ListNode
// 当链表为空或只有一个数字时,反转即为本身
if head == nil || head.Next == nil {
return head
}
for {
// 中间变量 a 先存下 head 的位置
a := head
// head 转移至下一个节点,也就是从原链表中删除head
// 将中间变量指向另一个链表 m ,此时中间变量已存入一个节点作为 尾部
head,a.Next = head.Next,m
// 将 m 此时再指向 a , a 此时本身位置为原 head 的位置
// 且下一个节点为原 m 那么此时也就是 m 在头部添加上了原head 作为头部
m = a
// 取完一个节点后,若此时链表为空,则证明我们已反转完毕
if head == nil {
return m
}
}
}
结果
总结
反转链表是极其热门的考题,通过题目可以了解考生对链表的熟悉程度。通过查看热度也能发现该题热度很高,即使在第二百多题,
通过次数1,013,818提交次数1,390,692,依然很多。
希望看到博文的你能够燃起斗志,成为一个很认真的人就在今天就在现在,学习之路启程,不畏险阻。