📌  相关文章
📜  从链表中删除最后一次出现的项目

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

从链表中删除最后一次出现的项目

使用指针,遍历整个列表并使用特殊指针跟踪包含最后一个出现键的节点之前的节点。在此之后,只需将特殊指针的下一个下一个存储到特殊指针的下一个中,以从链表中删除所需的节点。

C++
#include 
#include 
using namespace std;
 
// A linked list Node
struct Node
{
    int data;
    struct Node* next;
};
 
// Function to delete the last occurrence
void deleteLast(struct Node** head, int x)
{
    struct Node** tmp1 = NULL;
    while (*head)
    {
            if ((*head)->data == x)
            {
                tmp1 = head;
            }
            head = &(*head)->next;
    }
    if (tmp1)
    {
        struct Node* tmp = *tmp1;
        *tmp1 = tmp->next;
        free(tmp);
    }
}
 
// Utility function to create a new node with
// given key
struct Node* newNode(int x)
{
    Node* node = new Node ;
    node->data = x;
    node->next = NULL;
    return node;
}
 
// This function prints contents of linked
// list starting from the given Node
void display(struct Node* head)
{
    struct Node* temp = head;
    if (head == NULL)
    {
        cout << "NULL\n";
        return;
    }
    while (temp != NULL)
    {
        cout << temp->data <<" --> ";
        temp = temp->next;
    }
    cout << "NULL\n";
}
 
// Driver code
int main()
{
    struct Node* 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);
     
    cout << "Created Linked list: ";
    display(head);
     
    // Pass the address of the head pointer
    deleteLast(&head, 4);  
    cout << "List after deletion of 4: ";
     
    display(head);
     
    return 0;
}
 
// This code is contributed by khushboogoyal499


C
#include 
#include 
 
// A linked list Node
struct Node {
    int data;
    struct Node* next;
};
 
// Function to delete the last occurrence
void deleteLast(struct Node** head, int x)
{
        struct Node** tmp1 = NULL;
        while(*head) {
                if((*head)->data == x) {
                        tmp1 = head;
                }
                head = &(*head)->next;
        }
        if(tmp1) {
                struct Node* tmp = *tmp1;
                *tmp1 = tmp->next;
                free(tmp);
        }
}
 
/* Utility function to create a new node with
given key */
struct Node* newNode(int x)
{
    struct Node* node = malloc(sizeof(struct Node*));
    node->data = x;
    node->next = NULL;
    return node;
}
 
// This function prints contents of linked list
// starting from the given Node
void display(struct Node* head)
{
    struct Node* temp = head;
    if (head == NULL) {
        printf("NULL\n");
        return;
    }
    while (temp != NULL) {
        printf("%d --> ", temp->data);
        temp = temp->next;
    }
    printf("NULL\n");
}
 
/* Driver program to test above functions*/
int main()
{
    struct Node* 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);
    printf("Created Linked list: ");
    display(head);
    deleteLast(&head, 4);   // Pass the address of the head pointer
    printf("List after deletion of 4: ");
    display(head);
    return 0;
}


Java
import java.io.*;
  
// A linked list Node
class Node
{
    int data;
    Node next;
     
    Node(int data)
    {
        this.data = data;
        this.next = null;
    }
}
 
class GFG{
 
// Function to delete the last occurrence
static Node deleteLast(Node head,int x)
{
    Node temp = head;
    Node ptr = null;
     
    while (temp != null)
    {
         
        // If found key, update
        if (temp.data == x)
            ptr = temp;
             
        temp = temp.next;
    }
   
    // If the last occurrence is the last node
    if (ptr != null && ptr.next == null)
    {
        temp = head;
         
        while (temp.next != ptr)
        {
            temp = temp.next;
        }
        temp.next = null;
    }
     
    // If it is not the last node
    if (ptr != null && ptr.next != null)
    {
        ptr.data = ptr.next.data;
        temp = ptr.next;
        ptr.next = ptr.next.next;
    }
    return head;
}
 
// This function prints contents of linked list
// starting from the given Node
static void display(Node head)
{
    Node temp = head;
    if (head == null)
    {
        System.out.print("NULL\n");
        return;
    }
    while (temp != null)
    {
        System.out.print( temp.data+" --> ");
        temp = temp.next;
    }
    System.out.print("NULL\n");
}
 
// Driver code
public static void main(String[] args)
{
    Node head = new Node(1);
    head.next = new Node(2);
    head.next.next = new Node(3);
    head.next.next.next = new Node(4);
    head.next.next.next.next = new Node(5);
    head.next.next.next.next.next = new Node(4);
    head.next.next.next.next.next.next = new Node(4);
     
    System.out.print("Created Linked list: ");
    display(head);
     
    // Pass the address of the head pointer
    head = deleteLast(head, 4);
    System.out.print("List after deletion of 4: ");
    display(head);
}
}
 
// This code is contributed by patel2127


Python3
# 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\n")
        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


Javascript


C++
// A C++ program to demonstrate deletion of last
// Node in singly linked list
#include 
 
// A linked list Node
struct Node {
    int key;
    struct Node* next;
};
 
void deleteLast(Node* head, int key)
{
    // Initialize previous of Node to be deleted
    Node* x = NULL;
 
    // Start from head and find the Node to be
    // deleted
    Node* temp = head;
    while (temp) {
        // If we found the key, update xv
        if (temp->key == key)
            x = temp;
 
        temp = temp->next;
    }
 
    // key occurs at-least once
    if (x != NULL) {
 
        // 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
        delete temp;
    }
}
 
/* Utility function to create a new node with
   given key */
Node* newNode(int key)
{
    Node* temp = new Node;
    temp->key = key;
    temp->next = NULL;
    return temp;
}
 
// This function prints contents of linked list
// starting from the given Node
void printList(struct Node* node)
{
    while (node != NULL) {
        printf(" %d ", node->key);
        node = node->next;
    }
}
 
/* Driver program to test above functions*/
int main()
{
    /* Start with the empty list */
    struct Node* 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);
 
    puts("Created Linked List: ");
    printList(head);
    deleteLast(head, 2);
    puts("\nLinked List after Deletion of 1: ");
    printList(head);
    return 0;
}


Java
// A Java program to demonstrate deletion of last
// Node in singly linked list
class GFG
{
     
 
// A linked list Node
static class Node
{
    int key;
    Node next;
};
 
static Node deleteLast(Node head, int key)
{
    // Initialize previous of Node to be deleted
    Node x = null;
 
    // Start from head and find the Node to be
    // deleted
    Node temp = head;
    while (temp != null)
    {
        // If we found the key, update xv
        if (temp.key == key)
            x = temp;
 
        temp = temp.next;
    }
 
    // key occurs at-least once
    if (x != null)
    {
 
        // 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 /
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    temp.next = null;
    return temp;
}
 
// This function prints contents of linked list
// starting from the given Node
static void printList( Node node)
{
    while (node != null)
    {
        System.out.printf(" %d ", node.key);
        node = node.next;
    }
}
 
// Driver code/
public static void main(String args[])
{
    // /Start with the empty list /
    Node 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);
 
    System.out.printf("Created Linked List: ");
    printList(head);
    deleteLast(head, 2);
    System.out.printf("\nLinked List after Deletion of 1: ");
    printList(head);
}
}
 
// This code is contributed by Arnab Kundu


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("\nLinked List after Deletion of 1: ")
    printList(head)
 
# This code is contributed by Arnab Kundu


C#
// C# program to demonstrate deletion of last
// Node in singly linked list
using System;
 
class GFG
{
     
 
// A linked list Node
public class Node
{
    public int key;
    public Node next;
};
 
static Node deleteLast(Node head, int key)
{
    // Initialize previous of Node to be deleted
    Node x = null;
 
    // Start from head and find the Node to be
    // deleted
    Node temp = head;
    while (temp != null)
    {
        // If we found the key, update xv
        if (temp.key == key)
            x = temp;
 
        temp = temp.next;
    }
 
    // key occurs at-least once
    if (x != null)
    {
 
        // 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 /
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    temp.next = null;
    return temp;
}
 
// This function prints contents of linked list
// starting from the given Node
static void printList( Node node)
{
    while (node != null)
    {
        Console.Write(" {0} ", node.key);
        node = node.next;
    }
}
 
// Driver code
public static void Main(String []args)
{
    // Start with the empty list
    Node 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);
 
    Console.Write("Created Linked List: ");
    printList(head);
    deleteLast(head, 2);
    Console.Write("\nLinked List after Deletion of 1: ");
    printList(head);
}
}
 
// This code has been contributed by 29AjayKumar


Javascript


C++
// A C++ program to demonstrate deletion of last
// Node in singly linked list
#include 
using namespace std;
 
// A linked list Node
struct Node {
    int data;
    struct Node* next;
};
 
// Function to delete the last occurrence
void deleteLast(struct Node* head, int x)
{
    struct Node *temp = head, *ptr = NULL;
    while (temp) {
 
        // If found key, update
        if (temp->data == x)
            ptr = temp;       
        temp = temp->next;
    }
 
    // If the last occurrence is the last node
    if (ptr != NULL && ptr->next == NULL) {
        temp = head;
        while (temp->next != ptr)
            temp = temp->next;      
        temp->next = NULL;
    }
 
    // If it is not the last node
    if (ptr != NULL && ptr->next != NULL) {
        ptr->data = ptr->next->data;
        temp = ptr->next;
        ptr->next = ptr->next->next;
        free(temp);
    }
}
 
/* Utility function to create a new node with
given key */
struct Node* newNode(int x)
{
    Node* node = new Node ;
    node->data = x;
    node->next = NULL;
    return node;
}
  
 
// This function prints contents of linked list
// starting from the given Node
void display(struct Node* head)
{
    struct Node* temp = head;
    if (head == NULL) {
        cout <<"NULL\n";
        return;
    }
    while (temp != NULL) {
        cout <<" --> "<< temp->data;
        temp = temp->next;
    }
    cout <<"NULL\n";
}
 
/* Driver program to test above functions*/
int main()
{
    struct Node* 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);
    cout <<"Created Linked list: ";
    display(head);
    deleteLast(head, 4);
    cout <<"List after deletion of 4: ";
    display(head);
    return 0;
}
 
// This code is contributed by shivanisinghss2110


C
// A C program to demonstrate deletion of last
// Node in singly linked list
#include 
#include 
 
// A linked list Node
struct Node {
    int data;
    struct Node* next;
};
 
// Function to delete the last occurrence
void deleteLast(struct Node* head, int x)
{
    struct Node *temp = head, *ptr = NULL;
    while (temp) {
 
        // If found key, update
        if (temp->data == x)
            ptr = temp;       
        temp = temp->next;
    }
 
    // If the last occurrence is the last node
    if (ptr != NULL && ptr->next == NULL) {
        temp = head;
        while (temp->next != ptr)
            temp = temp->next;      
        temp->next = NULL;
    }
 
    // If it is not the last node
    if (ptr != NULL && ptr->next != NULL) {
        ptr->data = ptr->next->data;
        temp = ptr->next;
        ptr->next = ptr->next->next;
        free(temp);
    }
}
 
/* Utility function to create a new node with
given key */
struct Node* newNode(int x)
{
    struct Node* node = malloc(sizeof(struct Node*));
    node->data = x;
    node->next = NULL;
    return node;
}
 
// This function prints contents of linked list
// starting from the given Node
void display(struct Node* head)
{
    struct Node* temp = head;
    if (head == NULL) {
        printf("NULL\n");
        return;
    }
    while (temp != NULL) {
        printf("%d --> ", temp->data);
        temp = temp->next;
    }
    printf("NULL\n");
}
 
/* Driver program to test above functions*/
int main()
{
    struct Node* 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);
    printf("Created Linked list: ");
    display(head);
    deleteLast(head, 4);
    printf("List after deletion of 4: ");
    display(head);
    return 0;
}


Java
// Java program to demonstrate deletion of last
// Node in singly linked list
class GFG
{
 
// A linked list Node
static class Node
{
    int data;
    Node next;
};
 
// Function to delete the last occurrence
static void deleteLast(Node head, int x)
{
    Node temp = head, ptr = null;
    while (temp!=null)
    {
 
        // If found key, update
        if (temp.data == x)
            ptr = temp;    
        temp = temp.next;
    }
 
    // If the last occurrence is the last node
    if (ptr != null && ptr.next == null)
    {
        temp = head;
        while (temp.next != ptr)
            temp = temp.next;
        temp.next = null;
    }
 
    // If it is not the last node
    if (ptr != null && ptr.next != null)
    {
        ptr.data = ptr.next.data;
        temp = ptr.next;
        ptr.next = ptr.next.next;
        System.gc();
    }
}
 
/* Utility function to create a new node with
given key */
static Node newNode(int x)
{
    Node node = new Node();
    node.data = x;
    node.next = null;
    return node;
}
 
// This function prints contents of linked list
// starting from the given Node
static void display(Node head)
{
    Node temp = head;
    if (head == null)
    {
        System.out.print("null\n");
        return;
    }
    while (temp != null)
    {
        System.out.printf("%d --> ", temp.data);
        temp = temp.next;
    }
    System.out.print("null\n");
}
 
/* Driver code*/
public static void main(String[] args)
{
    Node 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);
    System.out.print("Created Linked list: ");
    display(head);
    deleteLast(head, 4);
    System.out.print("List after deletion of 4: ");
    display(head);
}
}
 
/* This code is contributed by PrinciRaj1992 */


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\n")
        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


C#
// C# program to demonstrate deletion of last
// Node in singly linked list
using System;
 
class GFG
{
 
// A linked list Node
public class Node
{
    public int data;
    public Node next;
};
 
// Function to delete the last occurrence
static void deleteLast(Node head, int x)
{
    Node temp = head, ptr = null;
    while (temp != null)
    {
 
        // If found key, update
        if (temp.data == x)
            ptr = temp;    
        temp = temp.next;
    }
 
    // If the last occurrence is the last node
    if (ptr != null && ptr.next == null)
    {
        temp = head;
        while (temp.next != ptr)
            temp = temp.next;
        temp.next = null;
    }
 
    // If it is not the last node
    if (ptr != null && ptr.next != null)
    {
        ptr.data = ptr.next.data;
        temp = ptr.next;
        ptr.next = ptr.next.next;
    }
}
 
/* Utility function to create a new node with
given key */
static Node newNode(int x)
{
    Node node = new Node();
    node.data = x;
    node.next = null;
    return node;
}
 
// This function prints contents of linked list
// starting from the given Node
static void display(Node head)
{
    Node temp = head;
    if (head == null)
    {
        Console.Write("null\n");
        return;
    }
    while (temp != null)
    {
        Console.Write("{0} --> ", temp.data);
        temp = temp.next;
    }
    Console.Write("null\n");
}
 
/* Driver code*/
public static void Main(String[] args)
{
    Node 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);
    Console.Write("Created Linked list: ");
    display(head);
    deleteLast(head, 4);
    Console.Write("List after deletion of 4: ");
    display(head);
}
}
 
// This code contributed by Rajput-Ji


Javascript


输出
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

这个想法是从头到尾遍历链表。遍历时,跟踪上次出现的键。遍历完完整列表后,通过复制下一个节点的数据并删除下一个节点来删除最后一次出现。



C++

// A C++ program to demonstrate deletion of last
// Node in singly linked list
#include 
 
// A linked list Node
struct Node {
    int key;
    struct Node* next;
};
 
void deleteLast(Node* head, int key)
{
    // Initialize previous of Node to be deleted
    Node* x = NULL;
 
    // Start from head and find the Node to be
    // deleted
    Node* temp = head;
    while (temp) {
        // If we found the key, update xv
        if (temp->key == key)
            x = temp;
 
        temp = temp->next;
    }
 
    // key occurs at-least once
    if (x != NULL) {
 
        // 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
        delete temp;
    }
}
 
/* Utility function to create a new node with
   given key */
Node* newNode(int key)
{
    Node* temp = new Node;
    temp->key = key;
    temp->next = NULL;
    return temp;
}
 
// This function prints contents of linked list
// starting from the given Node
void printList(struct Node* node)
{
    while (node != NULL) {
        printf(" %d ", node->key);
        node = node->next;
    }
}
 
/* Driver program to test above functions*/
int main()
{
    /* Start with the empty list */
    struct Node* 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);
 
    puts("Created Linked List: ");
    printList(head);
    deleteLast(head, 2);
    puts("\nLinked List after Deletion of 1: ");
    printList(head);
    return 0;
}

Java

// A Java program to demonstrate deletion of last
// Node in singly linked list
class GFG
{
     
 
// A linked list Node
static class Node
{
    int key;
    Node next;
};
 
static Node deleteLast(Node head, int key)
{
    // Initialize previous of Node to be deleted
    Node x = null;
 
    // Start from head and find the Node to be
    // deleted
    Node temp = head;
    while (temp != null)
    {
        // If we found the key, update xv
        if (temp.key == key)
            x = temp;
 
        temp = temp.next;
    }
 
    // key occurs at-least once
    if (x != null)
    {
 
        // 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 /
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    temp.next = null;
    return temp;
}
 
// This function prints contents of linked list
// starting from the given Node
static void printList( Node node)
{
    while (node != null)
    {
        System.out.printf(" %d ", node.key);
        node = node.next;
    }
}
 
// Driver code/
public static void main(String args[])
{
    // /Start with the empty list /
    Node 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);
 
    System.out.printf("Created Linked List: ");
    printList(head);
    deleteLast(head, 2);
    System.out.printf("\nLinked List after Deletion of 1: ");
    printList(head);
}
}
 
// This code is contributed by Arnab Kundu

蟒蛇3

# 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("\nLinked List after Deletion of 1: ")
    printList(head)
 
# This code is contributed by Arnab Kundu

C#

// C# program to demonstrate deletion of last
// Node in singly linked list
using System;
 
class GFG
{
     
 
// A linked list Node
public class Node
{
    public int key;
    public Node next;
};
 
static Node deleteLast(Node head, int key)
{
    // Initialize previous of Node to be deleted
    Node x = null;
 
    // Start from head and find the Node to be
    // deleted
    Node temp = head;
    while (temp != null)
    {
        // If we found the key, update xv
        if (temp.key == key)
            x = temp;
 
        temp = temp.next;
    }
 
    // key occurs at-least once
    if (x != null)
    {
 
        // 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 /
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    temp.next = null;
    return temp;
}
 
// This function prints contents of linked list
// starting from the given Node
static void printList( Node node)
{
    while (node != null)
    {
        Console.Write(" {0} ", node.key);
        node = node.next;
    }
}
 
// Driver code
public static void Main(String []args)
{
    // Start with the empty list
    Node 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);
 
    Console.Write("Created Linked List: ");
    printList(head);
    deleteLast(head, 2);
    Console.Write("\nLinked List after Deletion of 1: ");
    printList(head);
}
}
 
// This code has been contributed by 29AjayKumar

Javascript


输出:

Created Linked List: 
 1  2  3  5  2  10 
Linked List after Deletion of 1: 
 1  2  3  5  10

当要删除的节点是最后一个节点时,上述解决方案不起作用。
以下解决方案处理所有情况。

C++

// A C++ program to demonstrate deletion of last
// Node in singly linked list
#include 
using namespace std;
 
// A linked list Node
struct Node {
    int data;
    struct Node* next;
};
 
// Function to delete the last occurrence
void deleteLast(struct Node* head, int x)
{
    struct Node *temp = head, *ptr = NULL;
    while (temp) {
 
        // If found key, update
        if (temp->data == x)
            ptr = temp;       
        temp = temp->next;
    }
 
    // If the last occurrence is the last node
    if (ptr != NULL && ptr->next == NULL) {
        temp = head;
        while (temp->next != ptr)
            temp = temp->next;      
        temp->next = NULL;
    }
 
    // If it is not the last node
    if (ptr != NULL && ptr->next != NULL) {
        ptr->data = ptr->next->data;
        temp = ptr->next;
        ptr->next = ptr->next->next;
        free(temp);
    }
}
 
/* Utility function to create a new node with
given key */
struct Node* newNode(int x)
{
    Node* node = new Node ;
    node->data = x;
    node->next = NULL;
    return node;
}
  
 
// This function prints contents of linked list
// starting from the given Node
void display(struct Node* head)
{
    struct Node* temp = head;
    if (head == NULL) {
        cout <<"NULL\n";
        return;
    }
    while (temp != NULL) {
        cout <<" --> "<< temp->data;
        temp = temp->next;
    }
    cout <<"NULL\n";
}
 
/* Driver program to test above functions*/
int main()
{
    struct Node* 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);
    cout <<"Created Linked list: ";
    display(head);
    deleteLast(head, 4);
    cout <<"List after deletion of 4: ";
    display(head);
    return 0;
}
 
// This code is contributed by shivanisinghss2110

C

// A C program to demonstrate deletion of last
// Node in singly linked list
#include 
#include 
 
// A linked list Node
struct Node {
    int data;
    struct Node* next;
};
 
// Function to delete the last occurrence
void deleteLast(struct Node* head, int x)
{
    struct Node *temp = head, *ptr = NULL;
    while (temp) {
 
        // If found key, update
        if (temp->data == x)
            ptr = temp;       
        temp = temp->next;
    }
 
    // If the last occurrence is the last node
    if (ptr != NULL && ptr->next == NULL) {
        temp = head;
        while (temp->next != ptr)
            temp = temp->next;      
        temp->next = NULL;
    }
 
    // If it is not the last node
    if (ptr != NULL && ptr->next != NULL) {
        ptr->data = ptr->next->data;
        temp = ptr->next;
        ptr->next = ptr->next->next;
        free(temp);
    }
}
 
/* Utility function to create a new node with
given key */
struct Node* newNode(int x)
{
    struct Node* node = malloc(sizeof(struct Node*));
    node->data = x;
    node->next = NULL;
    return node;
}
 
// This function prints contents of linked list
// starting from the given Node
void display(struct Node* head)
{
    struct Node* temp = head;
    if (head == NULL) {
        printf("NULL\n");
        return;
    }
    while (temp != NULL) {
        printf("%d --> ", temp->data);
        temp = temp->next;
    }
    printf("NULL\n");
}
 
/* Driver program to test above functions*/
int main()
{
    struct Node* 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);
    printf("Created Linked list: ");
    display(head);
    deleteLast(head, 4);
    printf("List after deletion of 4: ");
    display(head);
    return 0;
}

Java

// Java program to demonstrate deletion of last
// Node in singly linked list
class GFG
{
 
// A linked list Node
static class Node
{
    int data;
    Node next;
};
 
// Function to delete the last occurrence
static void deleteLast(Node head, int x)
{
    Node temp = head, ptr = null;
    while (temp!=null)
    {
 
        // If found key, update
        if (temp.data == x)
            ptr = temp;    
        temp = temp.next;
    }
 
    // If the last occurrence is the last node
    if (ptr != null && ptr.next == null)
    {
        temp = head;
        while (temp.next != ptr)
            temp = temp.next;
        temp.next = null;
    }
 
    // If it is not the last node
    if (ptr != null && ptr.next != null)
    {
        ptr.data = ptr.next.data;
        temp = ptr.next;
        ptr.next = ptr.next.next;
        System.gc();
    }
}
 
/* Utility function to create a new node with
given key */
static Node newNode(int x)
{
    Node node = new Node();
    node.data = x;
    node.next = null;
    return node;
}
 
// This function prints contents of linked list
// starting from the given Node
static void display(Node head)
{
    Node temp = head;
    if (head == null)
    {
        System.out.print("null\n");
        return;
    }
    while (temp != null)
    {
        System.out.printf("%d --> ", temp.data);
        temp = temp.next;
    }
    System.out.print("null\n");
}
 
/* Driver code*/
public static void main(String[] args)
{
    Node 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);
    System.out.print("Created Linked list: ");
    display(head);
    deleteLast(head, 4);
    System.out.print("List after deletion of 4: ");
    display(head);
}
}
 
/* This code is contributed by PrinciRaj1992 */

蟒蛇3

# 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\n")
        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

C#

// C# program to demonstrate deletion of last
// Node in singly linked list
using System;
 
class GFG
{
 
// A linked list Node
public class Node
{
    public int data;
    public Node next;
};
 
// Function to delete the last occurrence
static void deleteLast(Node head, int x)
{
    Node temp = head, ptr = null;
    while (temp != null)
    {
 
        // If found key, update
        if (temp.data == x)
            ptr = temp;    
        temp = temp.next;
    }
 
    // If the last occurrence is the last node
    if (ptr != null && ptr.next == null)
    {
        temp = head;
        while (temp.next != ptr)
            temp = temp.next;
        temp.next = null;
    }
 
    // If it is not the last node
    if (ptr != null && ptr.next != null)
    {
        ptr.data = ptr.next.data;
        temp = ptr.next;
        ptr.next = ptr.next.next;
    }
}
 
/* Utility function to create a new node with
given key */
static Node newNode(int x)
{
    Node node = new Node();
    node.data = x;
    node.next = null;
    return node;
}
 
// This function prints contents of linked list
// starting from the given Node
static void display(Node head)
{
    Node temp = head;
    if (head == null)
    {
        Console.Write("null\n");
        return;
    }
    while (temp != null)
    {
        Console.Write("{0} --> ", temp.data);
        temp = temp.next;
    }
    Console.Write("null\n");
}
 
/* Driver code*/
public static void Main(String[] args)
{
    Node 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);
    Console.Write("Created Linked list: ");
    display(head);
    deleteLast(head, 4);
    Console.Write("List after deletion of 4: ");
    display(head);
}
}
 
// This code contributed by Rajput-Ji

Javascript


输出:

Created Linked List: 
 1  2  3  4  5  4  4 
Linked List after Deletion of 1: 
 1  2  3  4  5  4

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程