当前代码,我正在尝试创建一个链表,然后按升序对链表进行排序。
import random
random_nums = random.sample(range(100), 10)
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = None
def __str__(self):
return str(self.data)
def insertNode(data, first_node):
current_node = first_node
while current_node !=None:
if data > current_node.data and data <= current_node.next.data:
new_node = Node(data, current_node.next)
last_node.next = new_node
print("Inserting node: " + str(data))
current_node = current_node.next
first_node = Node(random_nums[0], None)
for i in random_nums[1:]:
insertNode(i, first_node)
print("Linked list values:")
current_node = first_node
while current_node != None:
print (str(current_node.data) + " => ", end="")
current_node = current_node.next
input()
目前收到错误
文件“python”,第25行,in 在insertNode中输入“python”,第16行 AttributeError:'NoneType'对象没有属性'data'
我是python的新手,试图让这个工作,任何建议?
答案 0 :(得分:1)
虽然您发布的代码和错误的行不完全匹配,但问题可能在这里:
if data > current_node.data and data <= current_node.next.data:
当您检查current_node
不是None
时,您永远不会检查current_node.next
是否也不是None
。
还有其他一些错误,例如last_node
未定义,没有在前面插入的概念,并且您总是浏览整个列表。这应该更好:
def insertNode(data, first_node):
current_node = first_node
new_node = Node(data, current_node.next)
if data <= current_node.data:
# insert at start
first_node = new_node
new_node.next = first_node
else:
while current_node is not None:
if current_node.next is None:
# insert at end
current_node.next = new_node
break
elif data > current_node.data and data <= current_node.next.data:
# insert in-between current and next node
new_node.next = current_node.next
current_node.next = new_node
break
current_node = current_node.next
print("Inserting node: " + str(data))
return first_node # must return first to avoid global variable!
要支持更改first_node
,您必须填写以下列表:
rand_num_iter = iter(random_nums) # avoids making a copy in [1:]
first_node = Node(next(rand_num_iter), None)
for i in rand_num_iter:
first_node = insertNode(i, first_node)