206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
有时候不要把思路限制的太窄,先是找到解决问题的方法,然后才是怎么解决问题,比如这道题,我想不出来怎么用递归的方式去解,但是用循环就很好处理,先解决问题,然后在想怎么用递归去解决问题。
// 遍历方式解决问题
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
// 注意链表为空的情况
if head == nil{
return nil
}
stack := []*ListNode{}
top := 0
for head != nil{
stack = append(stack, head)
head = head.Next
top++
}
for i := top - 1; i > 0; i--{
stack[i].Next = stack[i-1]
}
stack[0].Next = nil
return stack[top-1]
}