206. 反转链表(Easy)
题目描述
反转一个单链表。
样例
Input: 1->2->3->4->5->NULL
Ouptut: 5->4->3->2->1->NULL
题目解析
解法一【双指针】【重点】【经典】
通过前后双指针的方法,是比较经典的用法,后面还会反复用到
解法二【递归】
代码
双指针
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
pre, cur = None, head
while cur:
cur_next_bak = cur.next
cur.next = pre
# 向下一节点
pre = cur
cur = cur_next_bak
return pre # 注意,最后返回的是 pre
func reverseList(head *ListNode) *ListNode {
var pre *ListNode
pre, cur := nil, head
for cur != nil {
next := cur.Next
cur.Next = pre
pre = cur
cur = next
}
return pre
}
递归
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if not head or not head.next: # 走到最后一个节点
return head
cur = self.reverseList(head.next)
head.next.next = head
head.next = None # 为了解决第一个节点
return cur