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)