Eliminar el medio de la lista enlazada

Dada una lista enlazada individualmente, elimine la mitad de la lista enlazada. Por ejemplo, si la lista enlazada dada es 1->2->3->4->5, entonces la lista enlazada debe modificarse a 1->2->4->5

Si hay Nodes pares, entonces habría dos Nodes intermedios, debemos eliminar el segundo elemento intermedio. Por ejemplo, si la lista enlazada dada es 1->2->3->4->5->6, entonces debe modificarse a 1->2->3->5->6.
Si la lista enlazada de entrada es NULL, entonces debería permanecer NULL.

C++

// C++ program to delete middle of a linked list
#include <bits/stdc++.h>
using namespace std;
 
/* Link list Node */
struct Node {
    int data;
    struct Node* next;
};
// count of nodes
int countOfNodes(struct Node* head)
{
    int count = 0;
    while (head != NULL) {
        head = head->next;
        count++;
    }
    return count;
}
 
// Deletes middle node and returns
// head of the modified list
struct Node* deleteMid(struct Node* head)
{
    // Base cases
    if (head == NULL)
        return NULL;
    if (head->next == NULL) {
        delete head;
        return NULL;
    }
    struct Node* copyHead = head;
    // Find the count of nodes
    int count = countOfNodes(head);
    // Find the middle node
    int mid = count / 2;
    // Delete the middle node
    while (mid-- > 1)
        head = head->next;
    // Delete the middle node
    head->next = head->next->next;
    return copyHead;
}
 
// A utility function to print
// a given linked list
void printList(struct Node* ptr)
{
    while (ptr != NULL) {
        cout << ptr->data << "->";
        ptr = ptr->next;
    }
    cout << "NULL\n";
}
 
// Utility function to create a new node.
Node* newNode(int data)
{
    struct Node* temp = new Node;
    temp->data = data;
    temp->next = NULL;
    return temp;
}
 
/* Driver program to test above function*/
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(4);
 
    cout << "Given Linked List\n";
    printList(head);
    head = deleteMid(head);
    cout << "Linked List after deletion of middle\n";
    printList(head);
    return 0;
}
 
// This code is contributed by Aditya Kumar (adityakumar129)

C

// C program to delete middle of a linked list
 
#include <stdio.h>
#include <stdlib.h>
 
/* Link list Node */
typedef struct Node {
    int data;
    struct Node* next;
} Node;
 
// count of nodes
int countOfNodes(Node* head)
{
    int count = 0;
    while (head != NULL) {
        head = head->next;
        count++;
    }
    return count;
}
 
// Deletes middle node and returns
// head of the modified list
Node* deleteMid(Node* head)
{
    // Base cases
    if (head == NULL)
        return NULL;
    if (head->next == NULL) {
        free(head);
        return NULL;
    }
    Node* copyHead = head;
    // Find the count of nodes
    int count = countOfNodes(head);
    // Find the middle node
    int mid = count / 2;
    // Delete the middle node
    head = head->next;
    // Delete the middle node
    head->next = head->next->next;
    return copyHead;
}
 
// A utility function to print
// a given linked list
void printList(Node* ptr)
{
    while (ptr != NULL) {
        printf("%d ->", ptr->data);
        ptr = ptr->next;
    }
    printf("NULL\n");
}
 
// Utility function to create a new node.
Node* newNode(int data)
{
    Node* temp = (Node*)malloc(sizeof(Node));
    temp->data = data;
    temp->next = NULL;
    return temp;
}
 
/* Driver program to test above function*/
int main()
{
    /* Start with the empty list */
    Node* head = newNode(1);
    head->next = newNode(2);
    head->next->next = newNode(3);
    head->next->next->next = newNode(4);
 
    printf("Given Linked List\n");
    printList(head);
    head = deleteMid(head);
    printf("Linked List after deletion of middle\n");
    printList(head);
    return 0;
}
 
// This code is contributed by Aditya Kumar (adityakumar129)

Java

// Java program to delete middle
// of a linked list
import java.io.*;
 
class GFG {
 
    /* Link list Node */
    static class Node {
        int data;
        Node next;
    }
 
    // Utility function to create a new node.
    static Node newNode(int data)
    {
        Node temp = new Node();
        temp.data = data;
        temp.next = null;
        return temp;
    }
 
    // count of nodes
    static int countOfNodes(Node head)
    {
        int count = 0;
        while (head != null) {
            head = head.next;
            count++;
        }
        return count;
    }
 
    // Deletes middle node and returns
    // head of the modified list
    static Node deleteMid(Node head)
    {
        // Base cases
        if (head == null)
            return null;
        if (head.next == null) {
            return null;
        }
        Node copyHead = head;
 
        // Find the count of nodes
        int count = countOfNodes(head);
 
        // Find the middle node
        int mid = count / 2;
 
        // Delete the middle node
        while (mid-- > 1) {
            head = head.next;
        }
 
        // Delete the middle node
        head.next = head.next.next;
 
        return copyHead;
    }
 
    // A utility function to print
    // a given linked list
    static void printList(Node ptr)
    {
        while (ptr != null) {
            System.out.print(ptr.data + "->");
            ptr = ptr.next;
        }
        System.out.println("NULL");
    }
 
    /* 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(4);
 
        System.out.println("Given Linked List");
        printList(head);
 
        head = deleteMid(head);
 
        System.out.println(
            "Linked List after deletion of middle");
        printList(head);
    }
}
 
// This code is contributed by rajsanghavi9.

Python3

# Python3 program to delete middle
# of a linked list
  
# Link list Node
class Node:
     
    def __init__(self):
         
        self.data = 0
        self.next = None
     
# Count of nodes
def countOfNodes(head):
 
    count = 0
     
    while (head != None):
        head = head.next
        count += 1
     
    return count
 
# Deletes middle node and returns
# head of the modified list
def deleteMid(head):
 
    # Base cases
    if (head == None):
        return None
    if (head.next == None):
        del head
        return None
 
    copyHead = head
  
    # Find the count of nodes
    count = countOfNodes(head)
  
    # Find the middle node
    mid = count // 2
  
    # Delete the middle node
    while (mid > 1):
        mid -= 1
        head = head.next
  
    # Delete the middle node
    head.next = head.next.next
  
    return copyHead
 
# A utility function to print
# a given linked list
def printList(ptr):
 
    while (ptr != None):
        print(ptr.data, end = '->')
        ptr = ptr.next
     
    print('NULL')
     
# Utility function to create a new node.
def newNode(data):
 
    temp = Node()
    temp.data = data
    temp.next = None
    return temp
 
# 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(4)
  
    print("Given Linked List")
    printList(head)
  
    head = deleteMid(head)
  
    print("Linked List after deletion of middle")
    printList(head)
 
# This code is contributed by rutvik_56

C#

// C# program to delete middle of a linked list
using System;
 
class GfG {
 
  /* Link list Node */
  class Node {
    public int data;
    public Node next;
  }
 
  // count of nodes
  static int countOfNodes(Node head)
  {
    int count = 0;
    while (head != null) {
      head = head.next;
      count++;
    }
    return count;
  }
 
  // Deletes middle node and returns
  // head of the modified list
  static Node deleteMid(Node head)
  {
    // Base cases
    if (head == null)
      return null;
    if (head.next == null) {
      return null;
    }
 
    // Initialize slow and fast pointers
    // to reach middle of linked list
    Node copyHead = head;
 
    // Find the count of nodes
    int count = countOfNodes(head);
 
    // Find the middle node
    int mid = count / 2;
 
    // Delete the middle node
    while (mid-- > 1) {
      head = head.next;
    }
 
    // Delete the middle node
    head.next = head.next.next;
 
    return copyHead;
 
  }
 
  // A utility function to print
  // a given linked list
  static void printList(Node ptr)
  {
    while (ptr != null) {
      Console.Write(ptr.data + "->");
      ptr = ptr.next;
    }
    Console.WriteLine("NULL");
  }
 
  // Utility function to create a new node.
  static Node newNode(int data)
  {
    Node temp = new Node();
    temp.data = data;
    temp.next = null;
    return temp;
  }
 
  /* 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(4);
 
    Console.WriteLine("Given Linked List");
    printList(head);
 
    head = deleteMid(head);
 
    Console.WriteLine("Linked List after "
                      + "deletion of middle");
    printList(head);
  }
}
 
/* This code is contributed by ShubhamSingh */

Javascript

<script>
 
// Javascript program to delete the
// middle of a linked list
 
    /* Link list Node */
     class Node {
        constructor() {
            this.data = 0;
            this.next = null;
        }
    }
     
    // count of nodes
    function countOfNodes(head)
    {
        let count = 0;
        while (head != null) {
            head = head.next;
            count+=1;
        }
        return count;
    }
 
    // Deletes middle node and returns
    // head of the modified list
    function deleteMid(head)
    {
        // Base cases
        if (head == null)
            return null;
        if (head.next == null) {
            return null;
        }
        var copyHead = head;
 
        // Find the count of nodes
        var count = countOfNodes(head);
 
        // Find the middle node
        var mid = parseInt(count / 2);
 
        // Delete the middle node
        while (mid-- > 1) {
            head = head.next;
        }
 
        // Delete the middle node
        head.next = head.next.next;
 
        return copyHead;
    }
 
    // A utility function to print
    // a given linked list
    function printList( ptr) {
        while (ptr != null) {
            document.write(ptr.data + "->");
            ptr = ptr.next;
        }
        document.write("NULL<br/>");
    }
 
    // Utility function to create a new node.
    function newNode(data) {
         temp = new Node();
        temp.data = data;
        temp.next = null;
        return temp;
    }
 
    /* Driver code */
     
        /* Start with the empty list */
         head = newNode(1);
        head.next = newNode(2);
        head.next.next = newNode(3);
        head.next.next.next = newNode(4);
 
        document.write("Given Linked List<br/>");
        printList(head);
 
        head = deleteMid(head);
 
        document.write(
        "Linked List after deletion of middle<br/>"
        );
        printList(head);
 
// This code is contributed by Shubham singh
 
</script>

C++

// C++ program to delete middle
// of a linked list
#include <bits/stdc++.h>
using namespace std;
 
/* Link list Node */
struct Node {
    int data;
    struct Node* next;
};
 
// Deletes middle node and returns
// head of the modified list
struct Node* deleteMid(struct Node* head)
{
    // Base cases
    if (head == NULL)
        return NULL;
    if (head->next == NULL) {
        delete head;
        return NULL;
    }
 
    // Initialize slow and fast pointers
    // to reach middle of linked list
    struct Node* slow_ptr = head;
    struct Node* fast_ptr = head;
 
    // Find the middle and previous of middle.
// To store previous of slow_ptr   
struct Node* prev;
    while (fast_ptr != NULL
&& fast_ptr->next != NULL) {
        fast_ptr = fast_ptr->next->next;
        prev = slow_ptr;
        slow_ptr = slow_ptr->next;
    }
 
    // Delete the middle node
    prev->next = slow_ptr->next;
    delete slow_ptr;
 
    return head;
}
 
// A utility function to print
// a given linked list
void printList(struct Node* ptr)
{
    while (ptr != NULL) {
        cout << ptr->data << "->";
        ptr = ptr->next;
    }
    cout << "NULL\n";
}
 
// Utility function to create a new node.
Node* newNode(int data)
{
    struct Node* temp = new Node;
    temp->data = data;
    temp->next = NULL;
    return temp;
}
 
/* Driver program to test above function*/
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(4);
 
    cout << "Given Linked List\n";
    printList(head);
 
    head = deleteMid(head);
 
    cout << "Linked List after deletion of middle\n";
    printList(head);
 
    return 0;
}

Java

// Java program to delete the
// middle of a linked list
class GfG {
 
    /* Link list Node */
    static class Node {
        int data;
        Node next;
    }
 
    // Deletes middle node and returns
    // head of the modified list
    static Node deleteMid(Node head)
    {
        // Base cases
        if (head == null)
            return null;
        if (head.next == null) {
            return null;
        }
 
        // Initialize slow and fast pointers
        // to reach middle of linked list
        Node slow_ptr = head;
        Node fast_ptr = head;
 
        // Find the middle and previous of middle.
        Node prev = null;
 
        // To store previous of slow_ptr
        while (fast_ptr != null
&& fast_ptr.next != null) {
            fast_ptr = fast_ptr.next.next;
            prev = slow_ptr;
            slow_ptr = slow_ptr.next;
        }
 
        // Delete the middle node
        prev.next = slow_ptr.next;
 
        return head;
    }
 
    // A utility function to print
// a given linked list
    static void printList(Node ptr)
    {
        while (ptr != null) {
            System.out.print(ptr.data + "->");
            ptr = ptr.next;
        }
        System.out.println("NULL");
    }
 
    // Utility function to create a new node.
    static Node newNode(int data)
    {
        Node temp = new Node();
        temp.data = data;
        temp.next = null;
        return temp;
    }
 
    /* 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(4);
 
        System.out.println("Given Linked List");
        printList(head);
 
        head = deleteMid(head);
 
        System.out.println("Linked List after deletion of middle");
        printList(head);
    }
}
 
// This code is contributed by Prerna saini.

Python3

# Python3 program to delete the
# middle of a linked list
 
# Linked List Node
class Node:
     
    def __init__(self, data):
         
        self.data = data
        self.next = None
 
# Create and handle list operations
class LinkedList:
     
    def __init__(self):
         
        # Head of the list
        self.head = None
 
    # Add new node to the list end
    def addToList(self, data):
         
        newNode = Node(data)
        if self.head is None:
            self.head = newNode
            return
             
        last = self.head
         
        while last.next:
            last = last.next
             
        last.next = newNode
 
    # Returns the list in string format
    def __str__(self):
         
        linkedListStr = ""
        temp = self.head
         
        while temp:
            linkedListStr += str(temp.data) + "->"
            temp = temp.next
             
        return linkedListStr + "NULL"
 
    # Method deletes middle node
    def deleteMid(self):
 
        # Base cases
        if (self.head is None or
            self.head.next is None):
            return
 
        # Initialize slow and fast pointers
        # to reach middle of linked list
        slow_Ptr = self.head
        fast_Ptr = self.head
 
        # Find the middle and previous of middle
        prev = None
 
        # To store previous of slow pointer
        while (fast_Ptr is not None and
               fast_Ptr.next is not None):
            fast_Ptr = fast_Ptr.next.next
            prev = slow_Ptr
            slow_Ptr = slow_Ptr.next
 
        # Delete the middle node
        prev.next = slow_Ptr.next
 
# Driver code
linkedList = LinkedList()
 
linkedList.addToList(1)
linkedList.addToList(2)
linkedList.addToList(3)
linkedList.addToList(4)
 
print("Given Linked List")
print(linkedList)
 
linkedList.deleteMid()
 
print("Linked List after deletion of middle")
print(linkedList)
 
# This code is contributed by Debidutta Rath

C#

// C# program to delete middle of a linked list
using System;
 
class GfG {
 
    /* Link list Node */
    class Node {
        public int data;
        public Node next;
    }
 
    // Deletes middle node and returns
    // head of the modified list
    static Node deleteMid(Node head)
    {
        // Base cases
        if (head == null)
            return null;
        if (head.next == null) {
            return null;
        }
 
        // Initialize slow and fast pointers
        // to reach middle of linked list
        Node slow_ptr = head;
        Node fast_ptr = head;
 
        // Find the middle and previous of middle.
        Node prev = null;
 
        // To store previous of slow_ptr
        while (fast_ptr != null && fast_ptr.next != null) {
            fast_ptr = fast_ptr.next.next;
            prev = slow_ptr;
            slow_ptr = slow_ptr.next;
        }
 
        // Delete the middle node
        prev.next = slow_ptr.next;
 
        return head;
    }
 
    // A utility function to print
    // a given linked list
    static void printList(Node ptr)
    {
        while (ptr != null) {
            Console.Write(ptr.data + "->");
            ptr = ptr.next;
        }
        Console.WriteLine("NULL");
    }
 
    // Utility function to create a new node.
    static Node newNode(int data)
    {
        Node temp = new Node();
        temp.data = data;
        temp.next = null;
        return temp;
    }
 
    /* 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(4);
 
        Console.WriteLine("Given Linked List");
        printList(head);
 
        head = deleteMid(head);
 
        Console.WriteLine("Linked List after"
                          + "deletion of middle");
        printList(head);
    }
}
 
/* This code is contributed by 29AjayKumar */

Javascript

<script>
 
// Javascript program to delete the
// middle of a linked list
 
 
    /* Link list Node */
     class Node {
        constructor() {
            this.data = 0;
            this.next = null;
        }
    }
    // Deletes middle node and returns
    // head of the modified list
    function deleteMid( head) {
        // Base cases
        if (head == null)
            return null;
        if (head.next == null) {
            return null;
        }
 
        // Initialize slow and fast pointers
        // to reach middle of linked list
        var slow_ptr = head;
        var fast_ptr = head;
 
        // Find the middle and previous of middle.
        var prev = null;
 
        // To store previous of slow_ptr
        while (fast_ptr != null && fast_ptr.next != null)
        {
            fast_ptr = fast_ptr.next.next;
            prev = slow_ptr;
            slow_ptr = slow_ptr.next;
        }
 
        // Delete the middle node
        prev.next = slow_ptr.next;
 
        return head;
    }
 
    // A utility function to print
    // a given linked list
    function printList( ptr) {
        while (ptr != null) {
            document.write(ptr.data + "->");
            ptr = ptr.next;
        }
        document.write("NULL<br/>");
    }
 
    // Utility function to create a new node.
    function newNode(data) {
         temp = new Node();
        temp.data = data;
        temp.next = null;
        return temp;
    }
 
    /* Driver code */
     
        /* Start with the empty list */
         head = newNode(1);
        head.next = newNode(2);
        head.next.next = newNode(3);
        head.next.next.next = newNode(4);
 
        document.write("Given Linked List<br/>");
        printList(head);
 
        head = deleteMid(head);
 
        document.write(
        "Linked List after deletion of middle<br/>"
        );
        printList(head);
 
// This code contributed by umadevi9616
 
</script>

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *