Saturday, August 21, 2010

Linked List

GXTechno Tags: , , , ,

/*Write a program to attach two singly linked lists

#include<stdio.h>
#include<conio.h>

struct node//declaration of node structure
{
    int data;//DATA FIELD
    struct node *next;
};

struct list//declaration of list structure
{
    struct node *head;
};

/*initilisation of the list*/
void init(struct list *l)
{
    l->head=NULL;
}

/*create the new node*/
int create(struct node *p, int data)
{
    if(p==NULL)//IF THE LIST IS EMPTY
        return 1;

    else
    {
             /*ADJUST THE POINTERS*/
        p->data=data;
        p->next=NULL;
        return 0;
    }
}

/*for inserting the node*/
int insert(struct list *l,int data)
{
    struct node *p,*q;
    int x;

    p=(struct node *)malloc(sizeof(struct node));//allocate memory to the new node

    x=create(p,data);//call create function to create the new node

    if(x)//if newnode couldn't be created
    return x;

    else if(l->head==NULL)//if the list is already empty
        l->head=p;

    else
    {
        q=l->head;

        while(q->next!=NULL)//TILL THE END
        q=q->next;

        q->next=p;
    }
    return 0;
}

/*displays the list*/
int display(struct list *l)
{
    struct node *q=l->head;

    if(q==NULL)//if the list is empty
    return 1;

    else
    {
        printf("\n");

        while(q!=NULL)//till the end
        {
            printf(" %d-> ",q->data);
            q=q->next;
        }
        printf("NULL");
    return 0;
    }
}

/*attaches the second list to the first*/
int attach(struct list *l1,struct list *l2)
{
    struct node *p;

    p=l1->head;//p now points to first node

    if((l1->head==NULL)&&(l2->head==NULL))
    return 1;

    else if(l1->head==NULL)
    return 2;

    else if(l2->head==NULL)
    return 3;

    else
    {
        while(p->next!=NULL)
        {
            p=p->next;
        }
        p->next=l2->head;
        return 0;
    }
}

//main function
int main()
{
    int data,x,y,pos,ch;
    struct list l1,l2;

      /*declare the head pointers of two lists */
    l1.head=NULL;
    l2.head=NULL;

    clrscr();//clears the user screen

    do
    {
        printf("\n Enter the data in the first linked list(-1 to stop) : ");
        scanf("%d",&data);

        if(data==-1)
        break;

        x=insert(&l1,data);//function call

        if(x)
        printf("\n Node can not be inserted ");

    }while(data!=-1);

    printf("\n The first linked list is: ");

    x=display(&l1);//function call

    if(x)
    printf("\n List is empty ");

    do
    {
        printf("\n Enter the data in the second linked list(-1 to stop) : ");
        scanf("%d",&data);

        if(data==-1)
        break;

        x=insert(&l2,data);//function call

        if(x)
        printf("\n Node can not be inserted ");

    }while(data!=-1);

    printf("\n The second linked list is: ");

    x=display(&l2);//function call

    if(x)
    printf("\n List is empty ");

    y=attach(&l1,&l2);//function call[attaches list]

    if(y==1)
    printf("\n Lists are empty ");

    else if(y==2)
    {
        printf("\n First list is empty ");
        printf("\n The list after attachment is : ");
        display(&l2);
    }

    else if(y==3)
    {
        printf("\n Second list is empty ");
        printf("\n The list after attachment is : ");
        display(&l1);
    }

    else
    {
        printf("\n The attached linked list is : ");
        display(&l1);
    }

     /*free the memory occcupied by the linked lists*/
    free(l1);
    free(l2);

getch();
return 0;
}

/*
  OUTPUT

Enter the data in the first linked list(-1 to stop) : 1

Enter the data in the first linked list(-1 to stop) : 2

Enter the data in the first linked list(-1 to stop) : 3

Enter the data in the first linked list(-1 to stop) : -1

The first linked list is:
1->  2->  3-> NULL
Enter the data in the second linked list(-1 to stop) : 4

Enter the data in the second linked list(-1 to stop) : 5

Enter the data in the second linked list(-1 to stop) : -1

The second linked list is:
4->  5-> NULL
The attached linked list is :
1->  2->  3->  4->  5-> NULL

No comments:

Post a Comment

Search This Blog