python-leetcode-反转链表
方法1:迭代法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
prev, curr = None, head
while curr:
next_node = curr.next # 1. 先存下一个节点
curr.next = prev # 2. 反转指针
prev = curr # 3. prev 前进
curr = next_node # 4. curr 前进
return prev # prev 成为新头部
方法 2:递归法
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
if not head or not head.next:
return head # 递归终止条件
new_head = self.reverseList(head.next) # 递归反转剩余部分
head.next.next = head # 反转当前节点指针
head.next = None # 断开原链
return new_head