如何使用Python实现链表的倒置k个节点操作

2023-04-11 00:00:00 节点 倒置 如何使用

下面是使用 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,即反转后的尾节点。

相关文章