【发布时间】:2021-05-24 09:59:50
【问题描述】:
我正在尝试对包含此类节点的 LinkedList 进行排序:
class Node:
def __init__(self, data, next=None):
self.data, self.next = data, next
这个想法是获取一个序列(列表/元组/字符串),从中创建一个 LinkedList:
def __init__(self, seq):
self.front = self.Node(None)
node = self.front
for item in seq:
node.next = self.Node(item)
node = node.next
排序的逻辑是在每次迭代中遍历链表,将每个项目与第一个项目进行比较,如果它更小/更大,则执行交换,继续遍历链表并进行相同的比较和操作.此处显示:
def min_sort(self, reverse):
self.count = 0
first = self.front
while first.next is not None:
print(self.get_list())
self.progress(first, reverse)
self.count += 1
first = first.next
def progress(self, first, reverse):
node = first
if (node is None): return
while True:
node = node.next
if node is None or node.next is None: break
if (reverse):
if (first.next.data < node.next.data):
self.vymen(first, node, node.next)
else:
if (first.next.data > node.next.data):
self.vymen(first, node, node.next)
问题在于交换本身(函数 self.vymen(...)),它通常使用基本的数字 LinkedList 工作,但是当加载一个字符串时,例如“我用 Python 编码”,空格不会交换到正确的位置,从而使整个结果变得混乱。 交换本身是:
def vymen(self, first, prev, swap):
prevX, currX, prevY, currY = first, first.next, prev, swap
if (self.front.next.data == swap.data): return
if (currX is None or currY is None): return
if (currX != prevY):
if (prevX is not None): prevX.next = currY
else: self.front = currY
if (prevY is not None): prevY.next = currX
else: self.front = currX
temp = currX.next
currX.next = currY.next
currY.next = temp
else:
temp = currY.next
currX.next = temp
currY.next = currX
prevX.next = currY
正如我所见,这实际上只是空格的问题,我不明白是什么问题,因为它在开始时交换了第一个空格,而不是其余的。如果有人能够指出错误或告诉我发生了什么,我将不胜感激:)
【问题讨论】:
-
请提供您所进行的实际调用,其中包含造成问题的特定输入,并具体说明您获得的输出以及您的期望。
标签: python sorting linked-list