繁体   English   中英

删除链表中的最后一个节点

[英]Delete last node in linked list

我正在使用 Python 实现链表中最后一个节点的删除。 下面是我的代码:

class Node:
    def __init__(self, key):
        self.key = key
        self.next = None
        
def printList(head):
    curr = head
    while curr != None:
        print(curr.key, end=" ")
        curr = curr.next
    
def deleteLastNode(head):
    if head == None:
        return None
    
    temp = head
    
    # Iterating till the last Node
    while temp.next != None:
        temp = temp.next
    temp = None
    return head

# Driver code
head = Node(10)
head.next = Node(20)
head.next.next = Node(30)

head = deleteLastNode(head)
printList(head)

但是,在输出中我仍然得到完整的链表。

10 20 30

我的疑问是为什么最后一个节点没有被删除。 此外,当最后一个节点已设置为temp = None时,它如何打印值30

好吧,你的链表是:

10 -> 20 -> 30

^head

你的迭代:

10 -> 20 -> 30

^head       ^temp

然后当你做temp = None ,只是意味着(你只是将None分配给temp ):

10 -> 20 -> 30       None

^head                ^temp

正确的方法是当您迭代20 ,执行temp.next = None以删除对最后一个节点的引用。 所以你的代码可能是:

class Node:
    def __init__(self, key):
        self.key = key
        self.next = None
        
def printList(head):
    curr = head
    while curr != None:
        print(curr.key, end=" ")
        curr = curr.next
    
def deleteLastNode(head):
    if head == None:
        return None
    
    temp = head
    
    # Iterating till the last Node
    while temp.next.next != None:
        temp = temp.next
    temp.next = None
    return head

# Driver code
head = Node(10)
head.next = Node(20)
head.next.next = Node(30)

head = deleteLastNode(head)
printList(head)

当您的链表包含至少两个元素时,此代码将起作用。 当只有一个元素时,这将引发异常。 我建议您使用一个虚拟头节点,它next指向真正的头节点。

#Another way of solving 
class Node:
    def __init__(self, key):
        self.key = key
        self.next = None
    
def printList(head):
    curr = head
    while curr != None:
        print(curr.key, end=" ")
        curr = curr.next

def deleteLastNode(head):
    if head == None:
        return None

    temp = head
    prev=None    #creating the value of previous element
    # Iterating till the last Node
    while temp.next != None:
        prev=temp  #updating for every iteration
        temp = temp.next
    prev.next = None #returning as NONE value
    return head

# Driver code
head = Node(10)
head.next = Node(20)
head.next.next = Node(30)

head = deleteLastNode(head)
printList(head)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM