【发布时间】:2018-10-28 17:03:20
【问题描述】:
我在duplicates_sorted 方法中调用了一个排序的链表,然后它会忽略列表中的第一个重复项并打印其余部分。为什么不包括第一个副本?
未排序 - 1、13、65、78、12、25、1、2、13、39、13、48、10、2
排序 - 1, 1, 2, 2, 10, 12, 12, 13, 13, 25, 32, 39, 48, 65, 78
打印:2、12、13
我将一个未排序的列表传递给bubble_sort 方法并对其进行排序。然后我将该列表传递给deuplicates_sorted 方法。
class Node(object):
item = -1
next = None
def __init__(self, item, next):
self.item = item
self.next = next
def has_next(self):
return self.next!=None
def get_next(self):
return self.next
def set_next(self,node):
self.next=node
class LinkedList(object):
def __init__(self):
self.item=None
self.size=0
def length(self):
curr = self
total = 0
while curr.get_next() is not None:
total +=1
curr = curr.get_next()
return total
def get_next(self):
return self.item.get_next()
def add(self, item):
new_node = Node(item, self.item);
self.item = new_node;
self.size += 1;
def print_list(self):
print("Print List = ", end= "");
if self.item is None:
return;
current = self.item;
print(current.item, end=", ");
while current.get_next():
current = current.get_next();
if not current.has_next():
print(current.item, end="");
else:
print(current.item, end= ", ")
# method that makes problems:
def duplicates_sorted(nums):
k = nums
duplicate_elements = []
while k is not None:
if k.get_next() is None:
break
if k.item == k.get_next().item:
duplicate_elements.append(k.item)
k = k.get_next()
print("Duplicates: ", duplicate_elements)
def bubble_sort(num):
for i in range(num.length()):
m = num.item
n = m.get_next()
while n is not None:
if n.item is None:
break
if m.item > n.item:
swap(m, n)
n = n.next
m = m.get_next()
def swap(node1, node2):
temp = node1.item
node1.item = node2.item
node2.item = temp
def single_list(): #merges two txt files into one
merge_list = LinkedList() #create empty linked list
with open('file1.txt', 'r') as myfile:
for line in myfile:
merge_list.add(int(line.strip()))
myfile.close()
with open('file2.txt', 'r') as myfile:
for line in myfile:
merge_list.add(int(line))
myfile.close
return merge_list
def main():
#creating a linked list
bubble_sortlist = single_list() #prints unsorted list
bubble_sortlist.print_list()
print()
bubble_sort(bubble_sortlist) #prints sorted list
bubble_sortlist.print_list()
print()
duplicates_sorted(bubble_sortlist) #prints duplicates
if __name__ =='__main__':
main()
【问题讨论】:
-
k.get_next()在做什么? -
获取列表中的下一项,该行应该将一个元素与其旁边的元素进行比较
-
...不要命名变量
list- 这是内置的名称,您的变量定义会隐藏它... -
抱歉不知道,我编辑了它
-
让我添加更多代码
标签: python python-3.x linked-list nodes