Python 删除链接列表中的最后一个元素

Python 删除链接列表中的最后一个元素,python,nodes,Python,Nodes,我只使用Node类创建了一个列表 class Node: def __init__(self, init_data): self.data = init_data self.next = None def get_data(self): return self.data def get_next(self): return self.next def set_data(self, new_data): self.data = new_data de

我只使用Node类创建了一个列表

class Node:
def __init__(self, init_data):
    self.data = init_data
    self.next = None

def get_data(self):
    return self.data

def get_next(self):
    return self.next

def set_data(self, new_data):
    self.data = new_data

def set_next(self, new_next):
    self.next = new_next

def __str__(self):
    return str(self.data)
我初始化了列表,最后一个节点是
None

我正在尝试删除此节点,但不知道如何删除?

一个好方法是跟踪上一个节点和当前节点,然后在到达列表末尾时,将“上一个”中的“下一个”设置为“无”

prev = None
cur = head
while cur.next is not None:
    prev = cur
    cur = cur.next
if prev: #in case the head is the tail
    prev.next = None

这样做的一个好方法是跟踪上一个节点和当前节点,然后在到达列表末尾时,将“上一个”中的“下一个”设置为“无”

prev = None
cur = head
while cur.next is not None:
    prev = cur
    cur = cur.next
if prev: #in case the head is the tail
    prev.next = None

您可能需要一个
列表
类来管理节点

class List:
    def __init__(self):
        self._nodes = None

    def push(self, node):
        node.set_next(self._nodes)
        self._nodes = node
        return self

    def pop(self):
        if self._nodes is None:
            return None

        temp = self._nodes
        self._nodes = temp.get_next()
        return temp

    def __len__(self):
        l = 0
        n = self._nodes
        while n is not None:
            n = n.get_next()
            l += 1
        return l

    def remove(self, node):
        n = self._nodes
        p = None
        while n is not None:
            if n is node:
                p.set_next(n.get_next())
                n.set_next(None)
                return True

            p = n
            n = n.get_next()

        return False

您可能需要一个
列表
类来管理节点

class List:
    def __init__(self):
        self._nodes = None

    def push(self, node):
        node.set_next(self._nodes)
        self._nodes = node
        return self

    def pop(self):
        if self._nodes is None:
            return None

        temp = self._nodes
        self._nodes = temp.get_next()
        return temp

    def __len__(self):
        l = 0
        n = self._nodes
        while n is not None:
            n = n.get_next()
            l += 1
        return l

    def remove(self, node):
        n = self._nodes
        p = None
        while n is not None:
            if n is node:
                p.set_next(n.get_next())
                n.set_next(None)
                return True

            p = n
            n = n.get_next()

        return False
在链表类中添加此方法,如下所示

class LinkedList():
    def __init__(self, head=None):
        if head == "" or head is None:
            self.head = None
        else:
            self.head = Node(head)
在链表类中添加此方法,如下所示

class LinkedList():
    def __init__(self, head=None):
        if head == "" or head is None:
            self.head = None
        else:
            self.head = Node(head)

如果self.next==None,则将最后一个节点分配到None旁边?不确定要实现什么。如果最后一个节点不应具有
next
属性,则只需
del lastnode.next
即可。但正如我所说,我不确定这是您想要的。尝试获取您想要的:我们可以使用您的
节点创建一个链表
llist=Node(0,Node(1,Node(2)))
。您是否询问如何修改
llist
,使其成为
节点(0,节点(1))
?或者其他?如果self.next==None,则将最后一个节点分配到None旁边?不确定要实现什么。如果最后一个节点不应具有
next
属性,则只需
del lastnode.next
即可。但正如我所说,我不确定这是您想要的。尝试获取您想要的:我们可以使用您的
节点创建一个链表
llist=Node(0,Node(1,Node(2)))
。您是否询问如何修改
llist
,使其成为
节点(0,节点(1))
?还是别的什么?