Python中链表的旋转(Rotate)操作
链表的旋转操作是指将链表中的结点依照一定规则进行旋转,使得链表的顺序发生改变。例如,将链表中前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
。同时,我们定义了两个变量pre
和cur
分别指向当前处理的结点的前一个结点和当前结点。
接着,我们进入一个循环,并在循环体内进行结点的逆序。具体来说,我们使用一个stack
数组存储当前结点所在的k个结点,并将count
计数器逐一累加直到k个结点之后才进入下一次循环。特别地,在最后一组不足k个结点的情况下,我们直接跳出循环。
在内层循环结束后,我们将stack
数组中的结点逐一弹出,并将其连接在链表上。最后,我们将上一组结点的尾结点与下一组结点的头结点相连即可。
最终,我们返回虚拟头结点dummy
的下一个结点,即完成了链表的旋转操作。
相关文章