Logo 
Search:

C Programming Articles

Submit Article
Home » Articles » C Programming » Data File StructureRSS Feeds

Program to concatenate one linked list at end of another and than to erase all nodes present in the linked list

Posted By: Reinhart Fischer     Category: C Programming     Views: 20695

Program to concatenate one linked list at end of another and than to erase all nodes present in the linked list.

Code for Program to concatenate one linked list at end of another and than to erase all nodes present in the linked list in C Programming

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

struct node
{
    int data ;
    struct node *link ;
} ;

void append ( struct node **, int ) ;
void concat ( struct node **, struct node ** ) ;
void display ( struct node * ) ;
int count ( struct node * ) ;
struct node * erase ( struct node * ) ;

void main( )
{
    struct node *first, *second ;

    first = second = NULL ;  /* empty linked lists */
append ( &first, 1 ) ; append ( &first, 2 ) ; append ( &first, 3 ) ; append ( &first, 4 ) ; clrscr( ) ; printf ( "\nFirst List : " ) ; display ( first ) ; printf ( "\nNo. of elements in the first Linked List = %d", count ( first ) ) ; append ( &second, 5 ) ; append ( &second, 6 ) ; append ( &second, 7 ) ; append ( &second, 8 ) ; printf ( "\n\nSecond List : " ) ; display ( second ) ; printf ( "\nNo. of elements in the second Linked List = %d", count ( second ) ) ; /* the result obtained after concatenation is in the first list */
concat ( &first, &second ) ; printf ( "\n\nConcatenated List : " ) ; display ( first ) ; printf ( "\n\nNo. of elements in Linked List before erasing = %d", count ( first ) ) ; first = erase ( first ) ; printf ( "\nNo. of elements in Linked List after erasing = %d", count ( first ) ) ; } /* adds a node at the end of a linked list */
void append ( struct node **q, int num ) { struct node *temp ; temp = *q ; if ( *q == NULL ) /* if the list is empty, create first node */
{ *q = malloc ( sizeof ( struct node ) ) ; temp = *q ; } else { /* go to last node */
while ( temp -> link != NULL ) temp = temp -> link ; /* add node at the end */
temp -> link = malloc ( sizeof ( struct node ) ) ; temp = temp -> link ; } /* assign data to the last node */
temp -> data = num ; temp -> link = NULL ; } /* concatenates two linked lists */
void concat ( struct node **p, struct node **q ) { struct node *temp ; /* if the first linked list is empty */
if ( *p == NULL ) *p = *q ; else { /* if both linked lists are non-empty */
if ( *q != NULL ) { temp = *p ; /* points to the starting of the first list */
/* traverse the entire first linked list */
while ( temp -> link != NULL ) temp = temp -> link ; temp -> link = *q ; /* concatenate the second list after the
first */
} } } /* displays the contents of the linked list */
void display ( struct node *q ) { printf ( "\n" ) ; /* traverse the entire linked list */
while ( q != NULL ) { printf ( "%d ", q -> data ) ; q = q -> link ; } } /* counts the number of nodes present in the linked list */
int count ( struct node *q ) { int c = 0 ; /* traverse the entire linked list */
while ( q != NULL ) { q = q -> link ; c++ ; } return c ; } /* erases all the nodes from a linked list */
struct node * erase ( struct node *q ) { struct node *temp ; /* traverse till the end erasing each node */
while ( q != NULL ) { temp = q ; q = q -> link ; free ( temp ) ; /* free the memory occupied by the node */
} return NULL ; }
  
Share: 



Reinhart Fischer
Reinhart Fischer author of Program to concatenate one linked list at end of another and than to erase all nodes present in the linked list is from Frankfurt, Germany.
 
View All Articles

 
Please enter your Comment

  • Comment should be atleast 30 Characters.
  • Please put code inside [Code] your code [/Code].

 
No Comment Found, Be the First to post comment!