2017-09-03 81 views
2

这是我的节点:Python的链表中删除功能不能正常工作

class Node(object): 
def __init__(self, data, next = None): 
    self.data = data 
    self.next_node = next 
def get_next(self): 
    return self.next_node 
def set_next(self, next): 
    self.next_node = next 
def get_data(self): 
    return self.data 
def set_data(self): 
    self.data = data 

这是LinkedList的本身:

class LinkedList(object): 
def __init__(self, root = None): 
    self.root = root 
    self.size = 0 
def size(self): 
    return self.size 
def insert(self, data): 
    new_node = Node (data, self.root) 
    self.root = new_node 
    self.size += 1 
def delete(self, data): 
    this_node = self.root 
    prev_node = None 
    while this_node: 
    if this_node.get_data() == data: 
     if prev_node: 
     prev_node.set_next(this_node.get_next()) 
     else: 
     self.root = this_node 
     self.size -= 1 
     return True 
    else: 
     prev_node = this_node 
     this_node = this_node.get_next() 
    return False 
def search(self, data): 
    this_node = self.root 
    while this_node: 
    if this_node.get_data() == data: 
     return data 
    else: 
     self.root = this_node.get_next() 
    return None 
def printLL(self): 
    this_node = self.root 
    while this_node: 
    print(this_node.data) 
    this_node = this_node.get_next() 

最后,这些都是我进行测试:

ll = LinkedList() 
ll.insert(1) 
ll.insert(2) 
ll.printLL() 
ll.delete(2) 
ll.printLL() 
if ll.search(2): 
    print("Value 2 found") 
else: 
    print("Value 2 not found") 
if ll.search(1): 
    print("Value 1 found") 
else: 
    print("Value 1 not found") 
ll.insert(4) 
ll.printLL() 
print(str(ll.size())) 

编辑:好的我已编辑的代码,它不再循环,但是,我现在得到这个输出:

2 
1 
2 
1 
Value 2 found 
Value 1 not found 
4 
1 
Traceback (most recent call last): 
    File "C:\Users\ErikIngvoldsen\Documents\Python Code\TestCode.py", line 71, in <module> 
    print(str(ll.size())) 
TypeError: 'int' object is not callable 

为什么对象不可调用?另外,为什么我的删除功能不起作用?作为参考,这是我的输出应该是什么样子:

2 1 
1 
Value 2 not found 
Value 1 found 
4 1 
2 

还有格式化的问题,但现在我只专注于获得这种正常工作。

+0

尝试改变'self.root = this_node.get_next()'成'this_node = this_node.get_next()'(你正在通过'this_node'循环,但你永远不会改变它的值)。 – EsotericVoid

+0

你应该接受一个答案并开始一个新的问题。另外,你的问题是在你的__init __()中你声明self.size = 0 –

回答

1

问题是,在循环中使用条件while this_node,并且永远不会更改this_node的值。

你应该分配this_node下一个节点的值,直到尤尔的LinkedList的结尾,你printLL()函数应该是:

def printLL(self): 
    this_node = self.root 
    while this_node: 
    print(this_node.data) 
    this_node = this_node.get_next() 
1

您的printLL函数永远不会更改this_node的值,因此循环不会终止。你可能意思是this_node = this_node.get_next()