如何使用Python实现链表的倒置k个节点操作
下面是使用 Python 实现链表倒置 k 个节点操作的代码:
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def reverseKGroup(head: ListNode, k: int) -> ListNode: if not head or k == 1: return head dummy = ListNode(0) dummy.next = head pre = dummy cur = head count = 0 while cur: count += 1 if count % k == 0: pre = reverse(pre, cur.next) cur = pre.next else: cur = cur.next return dummy.next def reverse(pre: ListNode, next: ListNode) -> ListNode: last = pre.next cur = last.next while cur != next: last.next = cur.next cur.next = pre.next pre.next = cur cur = last.next return last
其中,reverseKGroup() 函数接受一个链表头节点 head 和正整数 k 作为参数,返回每 k 个节点倒置后的链表头节点。
reverseKGroup() 函数首先创建链表虚拟头节点 dummy,以引导最终返回结果。
然后,定义两个指针 pre 和 cur,其中 pre 指向前置节点,cur 指向当前节点。
使用计数变量 count 记录遍历的节点数。
当 count 能被 k 整除时,反转 pre 和 cur 之间的 k 个节点,并将 pre 指向反转后的尾节点,cur 指向 pre 的下一个节点。
否则,依次遍历单个节点,直到遍历完整个链表。
最后返回 dummy.next,即链表倒置 k 个节点后的头节点。
reverse() 函数接受两个参数,分别是前置节点 pre 和下一个节点 next。该函数的作用是将 pre 和 next 之间的节点倒置,并返回反转后的尾节点。
首先,定义 last 指向 pre 的下一个节点,即要反转的第一个节点。cur 指向 last 的下一个节点。
当 cur 不等于 next 时,执行循环体。
在循环体内,先将 last.next 指向 cur.next,将 cur.next 指向 pre.next,将 pre.next 指向 cur。
随后,将 cur 指向 last.next,即要反转的下一个节点,继续执行循环体内的操作。
最后返回 last,即反转后的尾节点。
相关文章