Python中链表的旋转(Rotate)操作

2023-04-11 00:00:00 操作 链表 旋转

链表的旋转操作是指将链表中的结点依照一定规则进行旋转,使得链表的顺序发生改变。例如,将链表中前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:
    dummy = ListNode(0)
    dummy.next = head
    pre = dummy
    cur = pre.next

    while True:
        stack = []
        count = 0

        while cur and count < k:
            stack.append(cur)
            cur = cur.next
            count += 1

        if count != k:
            break

        while stack:
            pre.next = stack.pop()
            pre = pre.next

        pre.next = cur

    return dummy.next

上述代码中,我们首先定义了一个ListNode类表示链表中的结点。其__init__方法中包含两个参数,分别是结点的值和指向下一个结点的指针。

接着,我们定义了一个函数reverseKGroup用于实现链表旋转操作。该函数中首先创建了一个虚拟头结点dummy,并将其指向头结点head。同时,我们定义了两个变量precur分别指向当前处理的结点的前一个结点和当前结点。

接着,我们进入一个循环,并在循环体内进行结点的逆序。具体来说,我们使用一个stack数组存储当前结点所在的k个结点,并将count计数器逐一累加直到k个结点之后才进入下一次循环。特别地,在最后一组不足k个结点的情况下,我们直接跳出循环。

在内层循环结束后,我们将stack数组中的结点逐一弹出,并将其连接在链表上。最后,我们将上一组结点的尾结点与下一组结点的头结点相连即可。

最终,我们返回虚拟头结点dummy的下一个结点,即完成了链表的旋转操作。

相关文章