Python中链表的K个一组翻转链表操作
链表是一种常见的数据结构,Python中可以使用类来模拟链表。链表的K个一组翻转操作指的是将一个链表中每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 prev = dummy while prev: p = prev.next for i in range(k): if not p: # 若不足k个,则不操作直接返回 return dummy.next p = p.next pre, cur = prev.next, prev.next.next for i in range(1, k): pre.next = cur.next cur.next = prev.next prev.next = cur cur = pre.next prev = pre return dummy.next
该代码中,首先定义了链表节点类ListNode,并在reverseKGroup函数中定义了一个虚拟节点dummy,用于方便链表的翻转操作。代码中使用了双指针法,每次翻转一个组的节点。
具体而言,每次首先检查是否有足够的节点进行下一轮翻转操作,若不足K个节点则直接返回。然后使用pre、cur两个指针分别指向待翻转组的第一个节点以及第二个节点。在循环中,对于每个节点,都将它挪到pre的后面,直到整个组的节点被翻转完毕。
最后返回虚拟节点dummy的next指针,即为翻转后的链表。
以下是一个使用字符串作为范例的Python代码演示:
s = "pidancode.com" head = ListNode(s[0]) p = head for c in s[1:]: p.next = ListNode(c) p = p.next k = 3 new_head = reverseKGroup(head, k) while new_head: print(new_head.val, end='') new_head = new_head.next
该代码中,首先将字符串中的每个字符作为一个链表节点组成链表,然后使用reverseKGroup函数按照每3个节点为一组进行翻转操作,并输出翻转后的链表的每个节点值。运行结果为:
dnicadopip.moc
可以看到,经过翻转节点操作后,原本的字符串pidancode.com被反转成了dnicadopip.moc。
相关文章