链表算法实战:反转、合并与排序(Python)
一、链表反转
1.1 反转链表
Python 代码
from typing import Optional
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]:
pre = None
cur = head
while cur:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
1.2 反转链表 II
思路
整体来看,p0 是反转前的第 left 个节点的前驱,pre 是反转后的头节点,cur 是当前遍历到的节点。
Python 代码
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
p0 = dummy = ListNode(next=head)
for _ (left - ):
p0 = p0.
pre =
cur = p0.
_ (right - left + ):
nxt = cur.
cur. = pre
pre = cur
cur = nxt
p0.. = cur
p0. = pre
dummy.


