问题陈述:给定一个由N个节点组成的链表L。对链接列表进行排序
示例:输入:1->-2->-3->4->-5.输出:-5->-3->-2->1->4
但当我运行代码时,我会得到输出:输入:1-2-3 4-5
您的输出为:1-2-3 4-5
但我认为我的代码在逻辑上是正确的。我在这里错过了什么。此外,我只能编辑sortList函数,因为其余的代码都是Boilerplate代码。
def sortList(head):
temp=head
arr=[]
while temp!=None:
arr.append(temp.data)
temp=temp.next
arr.sort()
ll1=LinkedList()
for i in arr:
ll1.append(i)
return ll1.head
#Initial Template for Python 3
class Node:
def __init__(self, data): # data -> value stored in node
self.data = data
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, new_value):
new_node = Node(new_value)
if self.head is None:
self.head = new_node
return
curr_node = self.head
while curr_node.next is not None:
curr_node = curr_node.next
curr_node.next = new_node
def PrintList(head):
while head:
print(head.data,end=' ')
head=head.next
if __name__ == '__main__':
t=int(input())
for cases in range(t):
n=int(input())
ll = LinkedList() # create a new linked list 'll'.
nodes_ll = list(map(int, input().strip().split()))
for nodes in nodes_ll:
ll.append(nodes) # add to the end of the list
sortList(ll.head)
PrintList(ll.head)
print()
如果您希望您的方法起作用,您只需要将方法的返回行更改为ll.head = ll1.head
。
但是,您不能将链接列表转换为python列表。这里我会给你一个代码,它将使用O(n^2(方法对链表进行排序,每次取最小值,交换并最终在列表的其余部分调用递归,如果你需要更高的速度,你可以尝试快速排序。
def sortList(head):
if not head.next:
return head
min = head
ite = head
while ite.next:
ite = ite.next
if ite.data < min.data:
min = ite
head.data, min.data = min.data, head.data
sortList(head.next)