2017-09-03 87 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()