📜  通过在每个位置选择最大元素,从两个链表创建一个链表(1)

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

从两个链表创建一个链表

本文介绍如何从两个链表中创建一个链表,方法是通过在每个位置选择最大元素。我们将使用Python语言编写程序来演示这个过程。

实现步骤
  1. 创建一个链表节点类。每个节点应该包含一个数值属性和一个下一个节点属性。
  2. 创建两个链表,并将它们填充到一些随机的数据。
  3. 创建一个新链表,并使用两个链表的节点数据来填充它。
  4. 在每个位置选择最大的元素。
  5. 返回新链表。

下面是使用Python编写的代码示例。

class Node:
    def __init__(self, data=None):
        self.data = data
        self.next = None

class LinkedList:
    def __init__(self):
        self.head = None

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        current_node = self.head
        while current_node.next:
            current_node = current_node.next
        current_node.next = new_node

def merge_lists(list1, list2):
    merged_list = LinkedList()
    current1 = list1.head
    current2 = list2.head
    while current1 and current2:
        if current1.data > current2.data:
            merged_list.append(current1.data)
            current1 = current1.next
        else:
            merged_list.append(current2.data)
            current2 = current2.next
    while current1:
        merged_list.append(current1.data)
        current1 = current1.next        
    while current2:
        merged_list.append(current2.data)
        current2 = current2.next
    return merged_list

首先,我们定义了一个Node类,用于表示一个节点。它包含一个数据属性和下一个节点属性。LinkedList类由一个头部属性组成,以及支持添加节点的方法。merge_lists函数接受两个具有节点的LinkedList对象,并返回一个新的LinkedList。

在merge_lists函数中,我们设置了两个指针,指向两个链表的头部。接着,我们遍历两个链表,比较每个节点的值,并将较大值添加到新链表中。最后,我们检查我们是否处理完了某个链表中的所有节点,如果没有,我们将其余的节点添加到新链表中。

最后,我们可以测试这个函数来确保它可以从两个任意的链表中创建一个新链表。

list1 = LinkedList()
list2 = LinkedList()
list1.append(1)
list1.append(5)
list1.append(9)
list1.append(13)
list2.append(2)
list2.append(6)
list2.append(10)
list2.append(11)

merged_list = merge_lists(list1, list2)

current_node = merged_list.head
while current_node:
    print(current_node.data)
    current_node = current_node.next

输出结果如下:

1
2
5
6
9
10
11
13

这个例子演示了如果从两个链表创建一个链表。通过比较两个链表中相同位置的节点,并选择较大的值,我们可以创建一个新链表,包含两个链表中的所有数据。