LeetCode每日一题
刷题记录。。
206. Reverse Linked List
Given the head of a singly linked list, reverse the list, and return the reversed list.
题目大意
链表反转
解题思路1
头插法反转
在遍历链表时,将当前节点的 \textit{next}next 指针改为指向前一个节点。由于节点没有引用其前一个节点,因此必须事先存储其前一个节点。在更改引用之前,还需要存储后一个节点。最后返回新的头引用。
代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func reverseList(head *ListNode) *ListNode {
var r *ListNode
for (head != nil) {
next := head.Next
head.Next = r
r = head
head = next
}
return r
}
解题思路2
递归
代码
func reverseList(head *ListNode) *ListNode {
if head == nil || head.Next == nil {
return head
}
newHead := reverseList(head.Next)
head.Next.Next = head
head.Next = nil
return newHead
}