反转链表是常见的面试题,但是却有无数人折腰在反转链表上.究其原因还是对反转链表理解不够深入,本文就以其中最巧妙地递归算法为例子,给大家讲解一下反转链表.
完整代码如下
func reverseList(head *ListNode) *ListNode{
if head == nil || head.Next == nil{
return head
}
lst := reverseList(head)
head.Next.Next = head
head.Next = nil
return lst
}
- 递归先找basecase,这个题的basecase就是
如果head是空
或者
head的下一个是空
那就不用反转,直接返回
if head == nil || head.Next == nil{
return head
}
- 然后我们就进入递归返回的就是剩下的反转
- 最后是对基本情况的操作
head.Next.Next = head
head.Next = nil
头结点的下一个节点连接到头结点
头结点指向空
递归完成!