2017-07-06 68 views
0

我創建了一個'pop'方法將最後一個節點從鏈表中取出。但是,我收到的問題是它不會刪除節點,它只是告訴我應該刪除的節點中的數據。Ruby中的'pop'方法

我應該用我使用測試驅動開發的前言,測試寫成'assert_equal「blop」,list.pop。 「blop」是最後一個節點的值。很好,我得到了我的方法告訴我,但它仍然不會刪除節點。

def pop 
@count -= 1 
return_string = "" 
current_node = @head 
until current_node.next_node == nil 
    current_node = current_node.next_node 
end 
return_string << current_node.data + " " 
return_string.strip 
current_node.next_node = Node.new(data) 
end 

我的問題是我怎麼回的精選被刪除什麼價值,以及,從鏈表刪除值。

+0

請記住,在Ruby中唯一的邏輯錯誤是'nil'和'false',所以除非你在列表中預期字面值爲'false',那麼'如果current_node.next_node'是表達方式那。你也可以做'current_node && = current_node.next_node'。 – tadman

+0

你的問題是什麼? – sawa

回答

0
until current_node.next_node == nil 
    current_node = current_node.next_node 
end 

當該循環結束,current_node指向最後一個節點(對於該下一個節點是`爲零的節點)。

這就是你應該刪除的節點,但是爲了刪除那個節點,你應該將前一節點的next_node指向nil

但是,在那時您沒有對前一個節點的引用。

您可以有另一個變量來跟蹤previous節點,以便您可以在退出循環後將其刪除。

你可以檢查這個相關的問題(不是特定的Ruby)的算法的想法。

Linked List implementation for a stack

作爲一個側面說明,對一個問題的答案的一個實現此爲使pop刪除列表中的第一個節點(和push節點添加到開頭),這使得它更容易(和更快,因爲你不會每次都瀏覽整個列表)。