[英]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.