用Python交换链表中的节点的程序

用Python交换链表中的节点的程序

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的引用。在某些场景下,我们需要交换链表中相邻的节点,比如将 (A -> B -> C -> D) 变为 (B -> A -> D -> C)

下面,我们将展示如何使用 Python 交换链表中的相邻节点,本文将会逐步引导您完成这个过程。

第一步:定义链表节点

在我们开始实现具体的算法之前,我们需要声明一个链表节点类,链表节点类至少要包含数据和指向下一个节点的引用两个属性。下面的代码为我们展示了如何定义链表节点类:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

第二步:构建链表

在实现链表相关算法时,我们需要先构建出一个链表对象。下面的代码展示了如何构建一个简单的链表对象 1 -> 2 -> 3 -> 4

# 构建链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)

第三步:交换相邻节点

经过前两步操作,我们构建了一个简单的链表。现在,我们可以开始交换链表中的相邻节点了。下面的代码演示了如何交换相邻节点:

# 交换相邻节点
def swapPairs(head: ListNode) -> ListNode:
    dummy = ListNode(0)
    dummy.next = head
    pre = dummy
    while pre.next and pre.next.next:
        a = pre.next
        b = a.next
        pre.next, a.next, b.next = b, b.next, a
        pre = a
    return dummy.next

new_head = swapPairs(head)

以上代码解释:

  • 维护一个虚拟头节点 dummy 以处理头节点的交换
  • 定义前置节点 pre 以方便相邻节点交换,初始值为虚拟头节点
  • 当链表中至少存在两个节点时,交换前置节点后继节点的后继节点
  • 最后返回头节点引用

完整代码

下面给出完整代码:

# 定义链表节点类
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

# 构建链表
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)

# 交换相邻节点
def swapPairs(head: ListNode) -> ListNode:
    dummy = ListNode(0)
    dummy.next = head
    pre = dummy
    while pre.next and pre.next.next:
        a = pre.next
        b = a.next
        pre.next, a.next, b.next = b, b.next, a
        pre = a
    return dummy.next

# 测试代码
new_head = swapPairs(head)

# 输出交换后的链表
while new_head:
    print(new_head.val, end=' -> ')
    new_head = new_head.next

当运行此代码时,我们将得到如下输出:

2 -> 1 -> 4 -> 3 ->

结论

本文演示了如何使用 Python 交换链表中的相邻节点。上述代码充分展示了 Python 在链表处理方面的优势,既简单又易于理解。如果你对链表操作有任何疑问,可以参考上述代码加以实践。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程