从单个链表中弹出最后一个节点/项目

时间:2017-08-22 23:26:03

标签: python-2.7 python-3.x list loops nodes

首先,我确实看过这个:Deleting the last element in my linked list(研究它和我的代码超过一个小时)我似乎无法"得到"此

我想:

  1. 删除 - " pop" - 我单个链接列表中的最后一项;
  2. 返回删除的项目,最后;
  3. 打印出" new"没有删除项目的列表。
  4. 这是我的代码:

    class Node(object):
    
        def __init__(self, value, nxt):
            self.value = value
            self.next = nxt
    
        def __repr__(self):
            nval = self.next and self.next.value or None
            return f"[{self.value}]"#":{repr(nval)}]"
    
    class List(object):
    
        def __init__(self):
            self.begin = None
            self.end = None
    
        def push(self, obj):
    
            node = Node(obj, None) 
            if self.begin == None:
                self.begin = node
                self.end = self.begin
    
            else:
                self.end.next = node
                self.end = node
    
    
         def pop(self):
            end = self.end
            start = self.begin
            while start.next is not None:
                start = start.next
                start.next = None
            return end.value
    
    l = List()
    
    l.push("a")
    l.push("b")
    l.push("c")
    l.push("d")
    
    print (l)
    
    print (l.pop())
    
    print ("AND FINALLY:", l)
    

    当我跑步时,我得到:

    ABCD

    d

    最后:ab

    当然,我发现我没有在节点上迭代到足以得到" c"节点。我已经玩了很长时间的循环,无法解决这个问题。

1 个答案:

答案 0 :(得分:0)

你有条件,同样重要的是缩进错误。您也没有更新self.end或测试列表中是否只有1个项目,例如:

def pop(self):
    end = self.end
    start = self.begin
    if start == end:
        self.begin = self.end = None
        return end.value

    while start.next is not end:
        start = start.next
    start.next = None
    self.end = start
    return end.value

注意:如果列表中没有值,则不会解决该问题。

另请注意:如果__repr__()课程中没有__str__()List,您将无法获得预期的输出。