leetCode 206 反转链表(头插法+ 两种递归)
递归
-
# 优先处理尾部的链表,此时需要返回子链表的头节点和尾节点 # 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 head: head, _ = self.func(head) return head def func(self, head): if not head.next: return head, head cur = head sonh, sont = self.func(cur.next) sont.next, cur.next = cur, None return sonh, cur -
# 优先处理头部链表,此时参数中需要指明前节点pre和当前节点p class Solution: def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]: return self.func(None, head) def func(self, pre, p): if not p: return pre nxt, p.next = p.next, pre return self.func(p, nxt)
迭代
-
# 采用头插法, 多元赋值时会先把右边的计算出来,然后再进行赋值 # 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]: dmyn = ListNode() dmyn.next, p = head, head while p and p.next: p.next.next, dmyn.next, p.next = dmyn.next, p.next, p.next.next return dmyn.next

浙公网安备 33010602011771号