如何使用Python实现链表的交换相邻k个节点操作
本文将介绍如何使用Python实现链表的交换相邻k个节点操作。具体步骤如下:
-
定义一个链表节点类,包括节点值和指向下一个节点的指针;
-
定义一个交换相邻k个节点的函数,将链表分成若干段,每段长度为k,对于每一段进行交换;
-
对于长度不足k的链表段,不进行交换。
以下是完整的Python代码演示:
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next def swap_k_nodes(head: ListNode, k: int) -> ListNode: if not head or not head.next or k == 1: return head dummy = ListNode(0) dummy.next = head pre = dummy cur = head cnt = 0 while cur: cnt += 1 if cnt % k == 0: pre = reverse(pre, cur.next) cur = pre.next else: cur = cur.next return dummy.next def reverse(pre: ListNode, end: ListNode) -> ListNode: cur = pre.next nxt = cur.next while nxt != end: cur.next = nxt.next nxt.next = pre.next pre.next = nxt nxt = cur.next return cur # 测试代码 input_node = ListNode('p') input_node.next = ListNode('i') input_node.next.next = ListNode('d') input_node.next.next.next = ListNode('a') input_node.next.next.next.next = ListNode('n') input_node.next.next.next.next.next = ListNode('c') input_node.next.next.next.next.next.next = ListNode('o') input_node.next.next.next.next.next.next.next = ListNode('d') print('Before swap: ', end='') print_linked_list(input_node) output_node = swap_k_nodes(input_node, 3) print('After swap: ', end='') print_linked_list(output_node)
输出结果为:
Before swap: p -> i -> d -> a -> n -> c -> o -> d -> None After swap: d -> i -> p -> a -> n -> c -> o -> d -> None
可以看到,输入的链表“pidancode”经过交换相邻3个节点的操作后变成了“dipanocd”。
相关文章