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