Hacer la cabeza del Node medio en una lista enlazada

Dada una lista enlazada individualmente, encuentre el medio de la lista enlazada y establezca el Node medio de la lista enlazada al principio de la lista enlazada. 

Ejemplos: 

C++

// C++ program to make middle node as head of
// linked list.
#include <bits/stdc++.h>
using namespace std;
 
/* Link list node */
class Node
{
    public:
    int data;
    Node* next;
};
 
/* Function to get the middle and set at
beginning of the linked list*/
void setMiddleHead(Node** head)
{
    if (*head == NULL)
        return;
 
    // To traverse list nodes one by one
    Node* one_node = (*head);
 
    // To traverse list nodes by skipping
    // one.
    Node* two_node = (*head);
 
    // To keep track of previous of middle
    Node* prev = NULL;
    while (two_node != NULL && two_node->next != NULL)
    {
 
        /* for previous node of middle node */
        prev = one_node;
 
        /* move one node each time*/
        two_node = two_node->next->next;
 
        /* move two node each time*/
        one_node = one_node->next;
    }
 
    /* set middle node at head */
    prev->next = prev->next->next;
    one_node->next = (*head);
    (*head) = one_node;
}
 
// To insert a node at the beginning of linked
// list.
void push(Node** head_ref, int new_data)
{
    /* allocate node */
    Node* new_node = new Node();
 
    new_node->data = new_data;
 
    /* link the old list off the new node */
    new_node->next = (*head_ref);
 
    /* move the head to point to the new node */
    (*head_ref) = new_node;
}
 
// A function to print a given linked list
void printList(Node* ptr)
{
    while (ptr != NULL)
    {
        cout << ptr->data << " ";
        ptr = ptr->next;
    }
    cout<<endl;
}
 
/* Driver code*/
int main()
{
    // Create a list of 5 nodes
    Node* head = NULL;
    int i;
    for (i = 5; i > 0; i--)
        push(&head, i);
 
    cout << " list before: ";
    printList(head);
 
    setMiddleHead(&head);
 
    cout << " list After: ";
    printList(head);
 
    return 0;
}
 
// This is code is contributed by rathbhupendra

C

// C program to make middle node as head of
// linked list.
#include <stdio.h>
#include <stdlib.h>
 
/* Link list node */
struct Node {
    int data;
    struct Node* next;
};
 
/* Function to get the middle and set at
   beginning of the linked list*/
void setMiddleHead(struct Node** head)
{
    if (*head == NULL)
        return;
 
    // To traverse list nodes one by one
    struct Node* one_node = (*head);
 
    // To traverse list nodes by skipping
    // one.
    struct Node* two_node = (*head);
 
    // To keep track of previous of middle
    struct Node* prev = NULL;
    while (two_node != NULL && two_node->next != NULL) {
 
        /* for previous node of middle node */
        prev = one_node;
 
        /* move one node each time*/
        two_node = two_node->next->next;
 
        /* move two node each time*/
        one_node = one_node->next;
    }
 
    /* set middle node at head */
    prev->next = prev->next->next;
    one_node->next = (*head);
    (*head) = one_node;
}
 
// To insert a node at the beginning of linked
// list.
void push(struct Node** head_ref, int new_data)
{
    /* allocate node */
    struct Node* new_node =
        (struct Node*)malloc(sizeof(struct Node));
 
    new_node->data = new_data;
 
    /* link the old list off the new node */
    new_node->next = (*head_ref);
 
    /* move the head to point to the new node */
    (*head_ref) = new_node;
}
 
// A  function to print a given linked list
void printList(struct Node* ptr)
{
    while (ptr != NULL) {
        printf("%d ", ptr->data);
        ptr = ptr->next;
    }
    printf("\n");
}
 
/* Driver function*/
int main()
{
    // Create a list of 5 nodes
    struct Node* head = NULL;
    int i;
    for (i = 5; i > 0; i--)
        push(&head, i);
 
    printf(" list before: ");
    printList(head);
 
    setMiddleHead(&head);
 
    printf(" list After:  ");
    printList(head);
 
    return 0;
}

Java

// Java program to make middle node
// as head of Linked list
public class GFG
{    
    /* Link list node */
    static class Node {
        int data;
        Node next;
        Node(int data){
            this.data = data;
            next = null;
        }
    }
     
    static Node head;
     
    /* Function to get the middle and
    set at beginning of the linked list*/
    static void setMiddleHead()
    {
        if (head == null)
            return;
      
        // To traverse list nodes one
        // by one
        Node one_node = head;
      
        // To traverse list nodes by
        // skipping one.
        Node two_node = head;
      
        // To keep track of previous of middle
        Node prev = null;
        while (two_node != null &&
               two_node.next != null) {
      
            /* for previous node of middle node */
            prev = one_node;
      
            /* move one node each time*/
            two_node = two_node.next.next;
      
            /* move two node each time*/
            one_node = one_node.next;
        }
      
        /* set middle node at head */
        prev.next = prev.next.next;
        one_node.next = head;
        head = one_node;
    }
      
    // To insert a node at the beginning of
    // linked list.
    static void push(int new_data)
    {
        /* allocate node */
        Node new_node = new Node(new_data);
      
        /* link the old list off the new node */
        new_node.next = head;
      
        /* move the head to point to the new node */
        head = new_node;
    }
      
    // A  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();
    }
      
    /* Driver function*/
    public static void main(String args[])
    {
        // Create a list of 5 nodes
        head = null;
        int i;
        for (i = 5; i > 0; i--)
            push(i);
         
        System.out.print(" list before: ");
        printList(head);
      
        setMiddleHead();
      
        System.out.print(" list After:  ");
        printList(head);
     
    }
}
// This code is contributed by Sumit Ghosh

Python3

# Python3 program to make middle node
# as head of Linked list
 
# Linked List node
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
 
# function to get the middle node
# set it as the beginning of the
# linked list
def setMiddleHead(head):
    if(head == None):
        return None
 
    # to traverse nodes
    # one by one
    one_node = head
 
    # to traverse nodes by
    # skipping one
    two_node = head
 
    # to keep track of previous middle
    prev = None
 
    while(two_node != None and
          two_node.next != None):
 
        # for previous node of middle node
        prev = one_node
 
        # move one node each time
        one_node = one_node.next
 
        # move two nodes each time
        two_node = two_node.next.next
 
    # set middle node at head
    prev.next = prev.next.next
    one_node.next = head
    head = one_node
 
    # return the modified head
    return head
 
def push(head, new_data):
 
    # allocate new node
    new_node = Node(new_data)
 
    #link the old list to new node
    new_node.next = head
 
    # move the head to point the new node
    head = new_node
 
    # return the modified head
    return head
 
# A function to print a given linked list
def printList(head):
    temp = head
    while (temp!=None):
         
        print(str(temp.data), end = " ")
        temp = temp.next
    print("")
 
# Create a list of 5 nodes
head = None
for i in range(5, 0, -1):
    head = push(head, i)
 
print(" list before: ", end = "")
printList(head)
 
head = setMiddleHead(head)
 
print(" list After: ", end = "")
printList(head)
 
# This code is contributed
# by Pranav Devarakonda

C#

// C# program to make middle node
// as head of Linked list
using System;
 
public class GFG
{    
    /* Link list node */
    class Node
    {
        public int data;
        public Node next;
        public Node(int data)
        {
            this.data = data;
            next = null;
        }
    }
     
    static Node head;
     
    /* Function to get the middle and
    set at beginning of the linked list*/
    static void setMiddleHead()
    {
        if (head == null)
            return;
     
        // To traverse list nodes one
        // by one
        Node one_node = head;
     
        // To traverse list nodes by
        // skipping one.
        Node two_node = head;
     
        // To keep track of previous of middle
        Node prev = null;
        while (two_node != null &&
            two_node.next != null)
        {
     
            /* for previous node of middle node */
            prev = one_node;
     
            /* move one node each time*/
            two_node = two_node.next.next;
     
            /* move two node each time*/
            one_node = one_node.next;
        }
     
        /* set middle node at head */
        prev.next = prev.next.next;
        one_node.next = head;
        head = one_node;
    }
     
    // To insert a node at the beginning of
    // linked list.
    static void push(int new_data)
    {
        /* allocate node */
        Node new_node = new Node(new_data);
     
        /* link the old list off the new node */
        new_node.next = head;
     
        /* move the head to point to the new node */
        head = new_node;
    }
     
    // A function to print a given linked list
    static void printList(Node ptr)
    {
        while (ptr != null) {
            Console.Write(ptr.data + " ");
            ptr = ptr.next;
        }
        Console.WriteLine();
    }
     
    /* Driver code*/
    public static void Main(String []args)
    {
        // Create a list of 5 nodes
        head = null;
        int i;
        for (i = 5; i > 0; i--)
            push(i);
         
        Console.Write(" list before: ");
        printList(head);
     
        setMiddleHead();
     
        Console.Write(" list After: ");
        printList(head);
    }
}
 
// This code is contributed by Rajput-Ji

Javascript

<script>
// javascript program to make middle node
// as head of Linked list
 
    /* Link list node */
class Node {
    constructor(val) {
        this.data = val;
        this.next = null;
    }
}
 
    var head;
 
    /*
     * Function to get the middle and set at beginning of the linked list
     */
    function setMiddleHead() {
        if (head == null)
            return;
 
        // To traverse list nodes one
        // by one
         one_node = head;
 
        // To traverse list nodes by
        // skipping one.
         two_node = head;
 
        // To keep track of previous of middle
         prev = null;
        while (two_node != null && two_node.next != null) {
 
            /* for previous node of middle node */
            prev = one_node;
 
            /* move one node each time */
            two_node = two_node.next.next;
 
            /* move two node each time */
            one_node = one_node.next;
        }
 
        /* set middle node at head */
        prev.next = prev.next.next;
        one_node.next = head;
        head = one_node;
    }
 
    // To insert a node at the beginning of
    // linked list.
    function push(new_data)
    {
     
        /* allocate node */
         new_node = new Node(new_data);
 
        /* link the old list off the new node */
        new_node.next = head;
 
        /* move the head to point to the new node */
        head = new_node;
    }
 
    // A function to print a given linked list
    function printList( ptr) {
        while (ptr != null) {
            document.write(ptr.data + " ");
            ptr = ptr.next;
        }
        document.write("<br/>");
    }
 
    /* Driver function */
     
        // Create a list of 5 nodes
        head = null;
        var i;
        for (i = 5; i > 0; i--)
            push(i);
 
        document.write(" list before: ");
        printList(head);
 
        setMiddleHead();
 
        document.write(" list After:  ");
        printList(head);
 
// This code is contributed by aashish1995
</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 *