[206][简单][递归][双指针] 反转链表
题目描述
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶: 你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
解题思路
递归
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
if head is None:
return None
new_head = None
def dfs(node):
if node.next is None:
nonlocal new_head
new_head = node
return node
new_node = dfs(node.next)
node.next = None
new_node.next = node
return node
dfs(head)
return new_head
迭代
class Solution:
def reverseList(self, head: ListNode) -> ListNode:
slow, fast = None, head
while fast is not None:
new_fast = fast.next
fast.next = slow
slow = fast
fast = new_fast
return slow
最后更新于
这有帮助吗?