用于从链接列表中删除项目的最后一次出现的Python程序
使用指针,遍历整个列表并使用特殊指针跟踪包含最后出现键的节点之前的节点。在此之后,只需将下一个特殊指针的下一个存储到下一个特殊指针中,以从链表中删除所需的节点。
Python3
# Python program to implement
# the above approach
# A linked list Node
class Node:
def __init__(self, new_data):
self.data = new_data
self.next = None
# Function to delete the last
# occurrence
def deleteLast(head, x):
temp = head
ptr = None
while (temp != None):
# If found key, update
if (temp.data == x):
ptr = temp
temp = temp.next
# If the last occurrence is the
# last node
if (ptr != None and ptr.next == None):
temp = head
while (temp.next != ptr):
temp = temp.next
temp.next = None
# If it is not the last node
if (ptr != None and ptr.next != None):
ptr.data = ptr.next.data
temp = ptr.next
ptr.next = ptr.next.next
return head
# Utility function to create a
# new node
# with given key
def newNode(x):
node = Node(0)
node.data = x
node.next = None
return node
# This function prints contents of
# linked list starting from the given
# Node
def display(head):
temp = head
if (head == None):
print("NULL")
return
while (temp != None):
print(temp.data, " --> ",
end = "")
temp = temp.next
print("NULL")
# Driver code
head = newNode(1)
head.next = newNode(2)
head.next.next = newNode(3)
head.next.next.next =
newNode(4)
head.next.next.next.next =
newNode(5)
head.next.next.next.next.next =
newNode(4)
head.next.next.next.next.next.next =
newNode(4)
print("Created Linked list: ",
end = '')
display(head)
# Pass the address of the head pointer
head = deleteLast(head, 4)
print("List after deletion of 4: ",
end = '')
display(head)
# This code is contributed by rutvik_56
Python3
# Python3 program to demonstrate deletion
# of last Node in singly linked list
# A linked list Node
class Node:
# Constructor to initialize the
# node object
def __init__(self, data):
self.data = data
self.next = None
def deleteLast(head, key):
# Initialize previous of Node to
# be deleted
x = None
# Start from head and find the Node
# to be deleted
temp = head
while (temp != None):
# If we found the key, update xv
if (temp.key == key) :
x = temp
temp = temp.next
# key occurs at-least once
if (x != None):
# Copy key of next Node to x
x.key = x.next.key
# Store and unlink next
temp = x.next
x.next = x.next.next
# Free memory for next
return head
# Utility function to create
# a new node with given key
def newNode(key):
temp = Node(0)
temp.key = key
temp.next = None
return temp
# This function prints contents of
# linked list starting from the given
# Node
def printList(node):
while (node != None):
print (node.key,
end = " ")
node = node.next
# Driver Code
if __name__=='__main__':
# Start with the empty list
head = newNode(1)
head.next = newNode(2)
head.next.next = newNode(3)
head.next.next.next =
newNode(5)
head.next.next.next.next =
newNode(2)
head.next.next.next.next.next =
newNode(10)
print("Created Linked List: ")
printList(head)
deleteLast(head, 2)
print("Linked List after Deletion of 1: ")
printList(head)
# This code is contributed by Arnab Kundu
Python3
# A Python3 program to demonstrate deletion
# of last Node in singly linked list
# A linked list Node
class Node:
def __init__(self, new_data):
self.data = new_data
self.next = None
# Function to delete the last
# occurrence
def deleteLast(head, x):
temp = head
ptr = None
while (temp != None):
# If found key, update
if (temp.data == x):
ptr = temp
temp = temp.next
# If the last occurrence is the
# last node
if (ptr != None and ptr.next == None):
temp = head
while (temp.next != ptr) :
temp = temp.next
temp.next = None
# If it is not the last node
if (ptr != None and ptr.next != None):
ptr.data = ptr.next.data
temp = ptr.next
ptr.next = ptr.next.next
return head
# Utility function to create a
# new node with given key
def newNode(x):
node = Node(0)
node.data = x
node.next = None
return node
# This function prints contents of
# linked list starting from the given
# Node
def display(head):
temp = head
if (head == None):
print("None")
return
while (temp != None):
print(temp.data, " -> ",
end = "")
temp = temp.next
print("None")
# Driver code
head = newNode(1)
head.next = newNode(2)
head.next.next = newNode(3)
head.next.next.next =
newNode(4)
head.next.next.next.next =
newNode(5)
head.next.next.next.next.next =
newNode(4)
head.next.next.next.next.next.next =
newNode(4)
print("Created Linked list: ")
display(head)
head = deleteLast(head, 4)
print("List after deletion of 4: ")
display(head)
# This code is contributed by Arnab Kundu
输出:
Created Linked list: 1 --> 2 --> 3 --> 4 --> 5 --> 4 --> 4 --> NULL
List after deletion of 4: 1 --> 2 --> 3 --> 4 --> 5 --> 4 --> NULL
给定一个链表和一个要删除的键。从链接中删除最后一次出现的键。该列表可能有重复项。
例子:
Input: 1->2->3->5->2->10, key = 2
Output: 1->2->3->5->10
这个想法是从头到尾遍历链表。遍历时,跟踪最后出现的键。遍历完整列表后,通过复制下一个节点的数据并删除下一个节点来删除最后一次出现。
Python3
# Python3 program to demonstrate deletion
# of last Node in singly linked list
# A linked list Node
class Node:
# Constructor to initialize the
# node object
def __init__(self, data):
self.data = data
self.next = None
def deleteLast(head, key):
# Initialize previous of Node to
# be deleted
x = None
# Start from head and find the Node
# to be deleted
temp = head
while (temp != None):
# If we found the key, update xv
if (temp.key == key) :
x = temp
temp = temp.next
# key occurs at-least once
if (x != None):
# Copy key of next Node to x
x.key = x.next.key
# Store and unlink next
temp = x.next
x.next = x.next.next
# Free memory for next
return head
# Utility function to create
# a new node with given key
def newNode(key):
temp = Node(0)
temp.key = key
temp.next = None
return temp
# This function prints contents of
# linked list starting from the given
# Node
def printList(node):
while (node != None):
print (node.key,
end = " ")
node = node.next
# Driver Code
if __name__=='__main__':
# Start with the empty list
head = newNode(1)
head.next = newNode(2)
head.next.next = newNode(3)
head.next.next.next =
newNode(5)
head.next.next.next.next =
newNode(2)
head.next.next.next.next.next =
newNode(10)
print("Created Linked List: ")
printList(head)
deleteLast(head, 2)
print("Linked List after Deletion of 1: ")
printList(head)
# This code is contributed by Arnab Kundu
输出:
Created Linked List:
1 2 3 5 2 10
Linked List after Deletion of 1:
1 2 3 5 10
当要删除的节点是最后一个节点时,上述解决方案不起作用。
以下解决方案处理所有情况。
Python3
# A Python3 program to demonstrate deletion
# of last Node in singly linked list
# A linked list Node
class Node:
def __init__(self, new_data):
self.data = new_data
self.next = None
# Function to delete the last
# occurrence
def deleteLast(head, x):
temp = head
ptr = None
while (temp != None):
# If found key, update
if (temp.data == x):
ptr = temp
temp = temp.next
# If the last occurrence is the
# last node
if (ptr != None and ptr.next == None):
temp = head
while (temp.next != ptr) :
temp = temp.next
temp.next = None
# If it is not the last node
if (ptr != None and ptr.next != None):
ptr.data = ptr.next.data
temp = ptr.next
ptr.next = ptr.next.next
return head
# Utility function to create a
# new node with given key
def newNode(x):
node = Node(0)
node.data = x
node.next = None
return node
# This function prints contents of
# linked list starting from the given
# Node
def display(head):
temp = head
if (head == None):
print("None")
return
while (temp != None):
print(temp.data, " -> ",
end = "")
temp = temp.next
print("None")
# Driver code
head = newNode(1)
head.next = newNode(2)
head.next.next = newNode(3)
head.next.next.next =
newNode(4)
head.next.next.next.next =
newNode(5)
head.next.next.next.next.next =
newNode(4)
head.next.next.next.next.next.next =
newNode(4)
print("Created Linked list: ")
display(head)
head = deleteLast(head, 4)
print("List after deletion of 4: ")
display(head)
# This code is contributed by Arnab Kundu
输出:
Created Linked List:
1 2 3 4 5 4 4
Linked List after Deletion of 1:
1 2 3 4 5 4
有关详细信息,请参阅有关从链接列表中删除最后一个项目的完整文章!