Python 将多个已排序的LinkedList合并为一个

Python 将多个已排序的LinkedList合并为一个,python,linked-list,Python,Linked List,我正试图写一个程序来合并两个排序的链表。 但这并不是合并它们。 似乎错误在于表示头指针。 如何表示头指针?我的方法正确吗。 我在使用指针时遇到了很多问题,请给我一些建议,尤其是头部指针 合并两个已排序的linkedlist 类节点: 定义初始化(自身,数据): self.data=data self.next=无 类链接列表: 定义初始化(自): self.head=无 def推送(自我、数据): nnode=节点(数据) nnode.next=self.head self.head=nnode

我正试图写一个程序来合并两个排序的链表。 但这并不是合并它们。 似乎错误在于表示头指针。 如何表示头指针?我的方法正确吗。 我在使用指针时遇到了很多问题,请给我一些建议,尤其是头部指针

合并两个已排序的linkedlist
类节点:
定义初始化(自身,数据):
self.data=data
self.next=无
类链接列表:
定义初始化(自):
self.head=无
def推送(自我、数据):
nnode=节点(数据)
nnode.next=self.head
self.head=nnode
def addNodeToList(自我、数据):
nnode=节点(数据)
如果self.head为无:
self.head=nnode
返回
last=self.head
而last.next不是None:
最后一个
last.next=nnode
def打印列表(自我):
温度=自身水头
虽然temp不是None:
打印(温度数据,结束=“”)
温度=下一个温度
def合并(第一,第二):
dummy=linkedlist()
温度=虚拟头
temp1=第一个头
temp2=秒头
而temp1和temp2:
如果temp1.data=temp2.data:
温度=温度2
下一个温度=无
temp2=temp2.next
打印('\n2..')
如果temp1不是None:
下一个温度=温度1
打印('\n3..')
其他:
下一个温度=温度2
打印('\n4..')
打印(‘完成’)
返回假人
如果“名称”=“\uuuuuuuu主要”:
list1=linkedlist()
列表1.addNodeToList(10)
列表1.addNodeToList(20)
列表1.addNodeToList(30)
列表1.addNodeToList(40)
列表1.addNodeToList(50)
list2=linkedlist()
#创建链表2:5->15->18->35->60
列表2.addNodeToList(5)
列表2.addNodeToList(15)
列表2.addNodeToList(18)
列表2.addNodeToList(35)
列表2.addNodeToList(60)
list1.printList()
打印()
list2.printList()
a=合并(列表1、列表2)
a、 打印列表()
预期输出为单个合并的linkedlist

您已经有了
addNodeToList()
函数,为什么不使用它呢

def merge(first,second):
    dummy=linkedlist()
    temp1=first.head
    temp2=second.head
    while temp1 and temp2:
        if temp1.data<temp2.data:
            dummy.addNodeToList(temp1.data)
            temp1=temp1.next
        else:
            dummy.addNodeToList(temp2.data)
            temp2=temp2.next
    while temp1:
        dummy.addNodeToList(temp1.data)
        temp1=temp1.next
    while temp2:
        dummy.addNodeToList(temp2.data)
        temp2=temp2.next
    return  dummy
def合并(第一,第二):
dummy=linkedlist()
temp1=第一个头
temp2=秒头
而temp1和temp2:

如果temp1.data您从未添加到代码中的
dummy
,则执行
temp=dummy.head
,然后重新分配
temp
,并且
dummy
列表从未更新。以下是一种方法:

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

class LinkedList: # classes in python must be in CamelCase
    def __init__(self):
        self.head = None

    def push(self, ndata):
        nnode = Node(ndata)
        nnode.next = self.head
        self.head = nnode

    def addNodeToList(self, ndata):
        nnode = Node(ndata)
        if self.head is None:
            self.head = nnode
            return
        last = self.head
        while last.next is not None:
            last = last.next
        last.next = nnode

    def printList(self):
        temp = self.head
        while temp is not None:
            print(temp.data, end = ' ')
            temp = temp.next

    def walk_list(self):
        temp = self.head
        values = []
        while temp is not None:
            values.append(temp.data)
            temp = temp.next
        return values

def merge(first, second):
    values1 = first.walk_list()
    values1.extend(second.walk_list())
    dummy = LinkedList()
    for v in sorted(values1):
        dummy.push(v)
    return dummy

if __name__ == '__main__':
    list1 = LinkedList()
    list1.addNodeToList(10)
    list1.addNodeToList(20)
    list1.addNodeToList(30)
    list1.addNodeToList(40)
    list1.addNodeToList(50)
    list2 = LinkedList()
    # Create linked list 2 : 5->15->18->35->60
    list2.addNodeToList(5)
    list2.addNodeToList(15)
    list2.addNodeToList(18)
    list2.addNodeToList(35)
    list2.addNodeToList(60)
    list1.printList()
    print()
    list2.printList()
    a = merge(list1, list2)
    a.printList()

合并linkedlist的意外输出是什么?与其手动尝试添加到列表中,为什么不直接调用
dummy.addNodeList()
?非常感谢。。。但是我不知道我在我的方法中做错了什么…@GarvitTyagi在另一个答案中提到,你做
temp=dummy.head
,然后用
temp
处理剩下的代码。例如,
temp=temp2
——这会修改
temp
,但不会修改
dummy.head
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

class LinkedList: # classes in python must be in CamelCase
    def __init__(self):
        self.head = None

    def push(self, ndata):
        nnode = Node(ndata)
        nnode.next = self.head
        self.head = nnode

    def addNodeToList(self, ndata):
        nnode = Node(ndata)
        if self.head is None:
            self.head = nnode
            return
        last = self.head
        while last.next is not None:
            last = last.next
        last.next = nnode

    def printList(self):
        temp = self.head
        while temp is not None:
            print(temp.data, end = ' ')
            temp = temp.next

    def walk_list(self):
        temp = self.head
        values = []
        while temp is not None:
            values.append(temp.data)
            temp = temp.next
        return values

def merge(first, second):
    values1 = first.walk_list()
    values1.extend(second.walk_list())
    dummy = LinkedList()
    for v in sorted(values1):
        dummy.push(v)
    return dummy

if __name__ == '__main__':
    list1 = LinkedList()
    list1.addNodeToList(10)
    list1.addNodeToList(20)
    list1.addNodeToList(30)
    list1.addNodeToList(40)
    list1.addNodeToList(50)
    list2 = LinkedList()
    # Create linked list 2 : 5->15->18->35->60
    list2.addNodeToList(5)
    list2.addNodeToList(15)
    list2.addNodeToList(18)
    list2.addNodeToList(35)
    list2.addNodeToList(60)
    list1.printList()
    print()
    list2.printList()
    a = merge(list1, list2)
    a.printList()