📌  相关文章
📜  用于围绕给定值对链表进行分区并保持原始顺序的Python程序(1)

📅  最后修改于: 2023-12-03 15:40:53.503000             🧑  作者: Mango

用于围绕给定值对链表进行分区并保持原始顺序的Python程序。

这是一个用于围绕给定值对链表进行分区并保持原始顺序的Python程序示例。该程序可以应用于需要将链表分为两个区域的场景,一个在区域内,另一个在区域外。其具体的工作原理是将节点分为两个分区,第一个分区中所有小于给定值的节点,第二个分区中所有大于等于给定值的节点。

代码片段如下所示:

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

def partition(head, x):
    """
    :type head: ListNode
    :type x: int
    :rtype: ListNode
    """
    # 创建两个分区的头节点
    before_head = ListNode(0)
    after_head = ListNode(0)
    # 创建两个分区的当前节点
    before = before_head
    after = after_head

    # 遍历整个链表,将节点分为两个分区
    while head:
        if head.val < x:
            before.next = head
            before = before.next
        else:
            after.next = head
            after = after.next
        head = head.next

    # 将两个分区连接起来
    after.next = None
    before.next = after_head.next

    return before_head.next

该程序利用Python的定义节点类和链表分类的方式,将给定的链表分为两部分。这里定义了一个节点类(ListNode),它包含两个属性:值(val)和指向下一个节点(next)的链接。除此之外,它还定义了一个函数(partition)来对链表进行分区。

函数中首先定义了两个空的头节点作为两个分区的起点。接着,创建了两个当前节点(before和after),用于遍历整个链表并将节点分为两个部分。当遍历到一个节点时,如果它的值小于给定值(x),则把该节点加入到before分区;否则,把该节点加入到after分区。最后将两个分区的起点连接起来,以构成完整的链表。

以上就是用于围绕给定值对链表进行分区并保持原始顺序的Python程序示例。