206、反转链表
反转一个单链表。
示例
输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL
解析
反转链表就是将指针反转,逻辑上很简单,操作上有难度,主要用两种方法:1、迭代;2、递归
答案
type ListNode struct { Val int Next *ListNode } func reverseList(head *ListNode) *ListNode { //迭代 var cur *ListNode = head var pre *ListNode = nil for cur != nil { next := cur.Next cur.Next = pre pre = cur cur = next } return pre } func reverseList1(head *ListNode) *ListNode { //递归 if head==nil || head.Next == nil { return head } //返回递归 p := reverseList1(head.Next) //反转自己的子节点 head.Next.Next =head head.Next=nil //返回p是最初的为节点 return p }