【发布时间】:2020-03-03 09:47:36
【问题描述】:
我的教授要求我对链表执行快速排序。因为所有的递归和链接对我来说仍然很新,所以它变得相当混乱。问题似乎与无意中被分配为无的东西有关 到目前为止,这是我的代码:
class Node:
def __init__(self, d, n):
self.data = d
self.next = n
class LinkedList:
def __init__(self):
self.head = None
self.length = 0
def append(self, d):
if self.head == None:
self.head = Node(d,None)
else:
ptr = self.head
while ptr.next != None:
ptr = ptr.next
ptr.next = Node(d,None)
self.length += 1
def merge(self,other):
ptr = self.head
while ptr.next != None:
ptr = ptr.next
ptr.next = other.head
def removeVal(self, d):
if self.head == None:
return
if self.head.data == d:
self.head = self.head.next
self.length -= 1
else:
ptr = self.head
while ptr.next != None:
if ptr.next.data == d:
ptr.next = ptr.next.next
self.length -= 1
break
ptr = ptr.next
def sort(self):
if self.head!=None:
pivot=self.head.data
self.removeVal(pivot)
smaller=LinkedList()
other=LinkedList()
ptr=self.head
while ptr.next!=None:
ptr=ptr.next
if ptr.data<pivot:
smaller.append(ptr.data)
else:
other.append(ptr.data)
smaller.sort()
other.sort()
self=smaller
self.append(pivot)
self.merge(other)
ls = LinkedList()
ls.append(0)
ls.append(1)
ls.append(3)
ls.sort()
运行会出现以下错误
Traceback (most recent call last):
File "main.py", line 71, in <module>
ls.sort()
File "main.py", line 58, in sort
other.sort()
File "main.py", line 51, in sort
while ptr.next!=None:
AttributeError: 'NoneType' object has no attribute 'next'
任何帮助将不胜感激
【问题讨论】:
-
您不会检查任何元素是否以更小或其他的形式结束。如果头部大于/小于所有其他元素,则每个元素都可能为空。
-
问题代码在概念上类似于快速排序,但它不是快速排序,它会涉及节点交换。确保教授可以接受这种方法。
标签: python algorithm sorting linked-list quicksort