Results 1 to 2 of 2

Thread: Middle node ptr of a linked list

  1. #1
    Geek_Guest
    Guest

    Middle node ptr of a linked list

    How to find the middle node ptr of a linked list by one traverse through the linked list?

    Question asked by visitor seshu babu k


  2. #2
    Contributing Member
    Join Date
    Apr 2007
    Answers
    41

    Re: Middle node ptr of a linked list

    #include<stdio.h>

    typedef struct node
    {
    int value;
    struct node *next;
    struct node *prev;
    }mynode ;



    void add_node(struct node **head, int value);
    void print_list(char *listName, struct node *head);
    void getTheMiddle(mynode *head);

    // The main function..
    int main()
    {
    mynode *head;
    head = (struct node *)NULL;

    add_node(&head, 1);
    add_node(&head, 10);
    add_node(&head, 5);
    add_node(&head, 70);
    add_node(&head, 9);
    add_node(&head, -99);
    add_node(&head, 0);
    add_node(&head, 555);
    add_node(&head, 55);

    print_list("myList", head);
    getTheMiddle(head);

    //getch();
    return(0);
    }




    // This function uses one slow and one fast
    // pointer to get to the middle of the LL.
    //
    // The slow pointer is advanced only by one node
    // and the fast pointer is advanced by two nodes!

    void getTheMiddle(mynode *head)
    {
    mynode *p = head;
    mynode *q = head;

    if(q!=NULL)
    {
    while((q->next)!=NULL && (q->next->next)!=NULL)
    {
    p=(p!=(mynode *)NULL?p->nextmynode *)NULL);
    q=(q!=(mynode *)NULL?q->nextmynode *)NULL);
    q=(q!=(mynode *)NULL?q->nextmynode *)NULL);
    }
    printf("The middle element is [%d]",p->value);
    }
    }



    // Function to add a node
    void add_node(struct node **head, int value)
    {
    mynode *temp, *cur;
    temp = (mynode *)malloc(sizeof(mynode));
    temp->next=NULL;
    temp->prev=NULL;

    if(*head == NULL)
    {
    *head=temp;
    temp->value=value;
    }
    else
    {
    for(cur=*head;cur->next!=NULL;cur=cur->next);
    cur->next=temp;
    temp->prev=cur;
    temp->value=value;
    }
    }

    // Function to print the linked list...
    void print_list(char *listName, struct node *head)
    {
    mynode *temp;

    printf("\n[%s] -> ", listName);
    for(temp=head;temp!=NULL;temp=temp->next)
    {
    printf("[%d]->",temp->value);
    }

    printf("NULL\n");

    }


Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
About us
Applying for a job can be a stressful and frustrating experience, especially for someone who has never done it before. Considering that you are competing for the position with a at least a dozen other applicants, it is imperative that you thoroughly prepare for the job interview, in order to stand a good chance of getting hired. That's where GeekInterview can help.
Interact