Home Linked List Copy an entire Linked List.

Copy an entire Linked List.

by nikoo28
2 comments 2 minutes read

Copying an entire Linked List, means allocating new memory and copying all the data to the new location.

This requires traversing each node and copying its data to a new location, keeping the original data intact.

#include<stdio.h>

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

// implementing a function to copy a Linked List
struct node * copyList(struct node * head)
{
	// creating a new variable as a list
	struct node * list2 = (struct node *)malloc(sizeof(struct node));
	
	//creating a temporary variable to traverse the new list
	struct node * temp = list2;

	while(head)
	{
		// assigning value
		temp -> data = head -> data;

		// move to the next node
		head = head -> next;
		
		// if the next node exists
		// we need to create a new memory space
		if(head)
		{
			struct node * temp2 = (struct node *)malloc(sizeof(struct node));
			
			//point the next of the temp to this new location
			temp -> next = temp2;
			
			// move to the new location
			temp = temp -> next;
		}
		else
		{
			// since there is no next node
			// means end of the list
			temp -> next = NULL;
		}
	}

	//returning the pointer of the new list
	return list2;
}

struct node * addElement(struct node *head, int number)
{
	struct node * temp = (struct node*)malloc(sizeof(struct node));
	temp -> data = number;
	temp -> next = NULL;
	struct node * temp2 = head;
	while(temp2 -> next != NULL)
		temp2 = temp2 -> next;
	temp2 -> next = temp;
	return head;
}

// a function to print the list
void printer(struct node * head)
{
	while(head)
	{
		printf("%d ",head -> data);
		head = head -> next;
	}
}

int main(void)
{
	//creating a list
	struct node * listHead = (struct node*)malloc(sizeof(struct node));
	listHead->data = 1;
	listHead->next = NULL;
	listHead = addElement(listHead, 2);
	listHead = addElement(listHead, 3);
	listHead = addElement(listHead, 4);
	
	printer(listHead);

	struct node * copy_of_list = copyList(listHead);
	
	// print the new list
	printf("\n");
	printer(copy_of_list);

	return 0;
}

You may also like

2 comments

Sai October 8, 2014 - 14:01

This code is flawed..please execute your code once to make sure its right. You are just allocating the list2 every time, but losing track of the allocated memory location completely.

nikoo28 October 8, 2014 - 21:34

Hi Sai,
Thanks for your support and feedback. I have corrected the code and will take care of this in the future.

Here is the working demo of the code. Please have a look
http://ideone.com/NFGyMB

Comments are closed.

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More