2025/2/24 【双指针法】LeetCode206. 反转链表

206. 反转链表 - 力扣(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):
        # 处理空链表或单节点链表
        if not head or not head.next:
            return head
        
        p = head
        q = p.next
        p.next = None # 将原头节点的 next 置为 None,避免形成环
        while q:
            temp = q.next # 保存 q 的下一个节点
            q.next = p
            p = q
            q = temp
        return p

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):
        return self.reverse(head, None)
    def reverse(self, cur, pre):
        if not cur:
            return pre
        
        temp = cur.next
        cur.next = pre
        return self.reverse(temp, cur)

 

posted @ 2025-02-24 15:51  axuu  阅读(21)  评论(0)    收藏  举报