📌  相关文章
📜  用于在给定约束下删除链表中给定节点的Python程序

📅  最后修改于: 2022-05-13 01:54:54.685000             🧑  作者: Mango

用于在给定约束下删除链表中给定节点的Python程序

给定一个单链表,编写一个函数来删除给定的节点。您的函数必须遵循以下约束:
1) 它必须接受指向起始节点的指针作为第一个参数,并接受要删除的节点作为第二个参数,即指向头节点的指针不是全局的。
2) 它不应该返回指向头节点的指针。
3) 它不应该接受指向头节点的指针。
您可以假设链接列表永远不会为空。
让函数名称为 deleteNode()。在一个简单的实现中,当要删除的节点是第一个节点时,该函数需要修改头指针。如上一篇文章所述,当一个函数修改头指针时,该函数必须使用给定的方法之一,我们不能在这里使用任何这些方法。
解决方案
我们明确处理要删除的节点是第一个节点的情况,我们将下一个节点的数据复制到head并删除下一个节点。被删除的节点不是头节点的情况,可以通过查找前一个节点并改变前一个节点的next来正常处理。以下是实现。

Python 3
# Node class
class Node:
  
    def __init__(self, data):
        self.data = data
        self.next = None
  
# LinkedList class
class LinkedList:
  
    def __init__(self):
        self.head = None
  
    def deleteNode(self, data):
        temp = self.head
        prev = self.head
        if temp.data == data:
            if temp.next is None:
                print("Can't delete the node as it has only one node")
            else:
                temp.data = temp.next.data
                temp.next = temp.next.next
            return
        while temp.next is not None and temp.data != data:
            prev = temp
            temp = temp.next
        if temp.next is None and temp.data !=data:
            print("Can't delete the node as it doesn't exist")
         # If node is last node of the linked list
        elif temp.next is None and temp.data == data:
            prev.next = None
        else:
            prev.next = temp.next
               
          
    # To push a new element in the Linked List     
    def push(self, new_data):
        new_node = Node(new_data)
        new_node.next = self.head
        self.head = new_node
  
    # To print all the elements of the Linked List
    def PrintList(self):
  
        temp = self.head
        while(temp):
            print(temp.data, end = " ")
            temp = temp.next
  
# Driver Code
llist = LinkedList()
llist.push(3)
llist.push(2)
llist.push(6)
llist.push(5)
llist.push(11)
llist.push(10)
llist.push(15)
llist.push(12)
  
print("Given Linked List: ", end = ' ')
llist.PrintList()
print("
  
Deleting node 10:")
llist.deleteNode(10)
print("Modified Linked List: ", end = ' ')
llist.PrintList()
print("
  
Deleting first node")
llist.deleteNode(12)
print("Modified Linked List: ", end = ' ')
llist.PrintList()
  
# This code is contributed by Akarsh Somani


输出:

Given Linked List: 12 15 10 11 5 6 2 3

Deleting node 10:
Modified Linked List: 12 15 11 5 6 2 3

Deleting first node
Modified Linked List: 15 11 5 6 2 3

请参阅完整文章在给定约束下删除链表中的给定节点以获取更多详细信息!