C Program to concatenate two circular linked lists

Data Structure Linked List (Article) Linked List (Program)

1085

Program:

<span class="com">/*  C Program to concatenate two circular linked lists*/</span><span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdio.h&gt;</span><span class="pln">
</span><span class="com">#include</span><span class="str">&lt;stdlib.h&gt;</span><span class="pln">

</span><span class="kwd">struct</span><span class="pln"> node
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">int</span><span class="pln"> info</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">link</span><span class="pun">;</span><span class="pln">
</span><span class="pun">};</span><span class="pln">

</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">create_list</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">void</span><span class="pln"> display</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">addtoempty</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">,</span><span class="kwd">int</span><span class="pln"> data </span><span class="pun">);</span><span class="pln">
</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">addatend</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">,</span><span class="kwd">int</span><span class="pln"> data</span><span class="pun">);</span><span class="pln">
</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">concat</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">last1</span><span class="pun">,</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">last2</span><span class="pun">);</span><span class="pln">

main</span><span class="pun">(</span><span class="pln"> </span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">last1</span><span class="pun">=</span><span class="pln">NULL</span><span class="pun">,*</span><span class="pln">last2</span><span class="pun">=</span><span class="pln">NULL</span><span class="pun">;</span><span class="pln">
	last1</span><span class="pun">=</span><span class="pln">create_list</span><span class="pun">(</span><span class="pln">last1</span><span class="pun">);</span><span class="pln">
	last2</span><span class="pun">=</span><span class="pln">create_list</span><span class="pun">(</span><span class="pln">last2</span><span class="pun">);</span><span class="pln">
	printf</span><span class="pun">(</span><span class="str">"First list is :  "</span><span class="pun">);</span><span class="pln">
	display</span><span class="pun">(</span><span class="pln">last1</span><span class="pun">);</span><span class="pln">
	printf</span><span class="pun">(</span><span class="str">"Second list is :  "</span><span class="pun">);</span><span class="pln">
	display</span><span class="pun">(</span><span class="pln">last2</span><span class="pun">);</span><span class="pln">
    last1</span><span class="pun">=</span><span class="pln">concat</span><span class="pun">(</span><span class="pln">last1</span><span class="pun">,</span><span class="pln"> last2</span><span class="pun">);</span><span class="pln">
	printf</span><span class="pun">(</span><span class="str">"Concatenated list is  : "</span><span class="pun">);</span><span class="pln">
	display</span><span class="pun">(</span><span class="pln">last1</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="com">/*End of main( )*/</span><span class="pln">

</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">concat</span><span class="pun">(</span><span class="pln"> </span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">last1</span><span class="pun">,</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">last2</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">ptr</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">last1</span><span class="pun">==</span><span class="pln">NULL</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		last1</span><span class="pun">=</span><span class="pln">last2</span><span class="pun">;</span><span class="pln">
		</span><span class="kwd">return</span><span class="pln"> last1</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">last2</span><span class="pun">==</span><span class="pln">NULL </span><span class="pun">)</span><span class="pln">   
		</span><span class="kwd">return</span><span class="pln"> last1</span><span class="pun">;</span><span class="pln">
	ptr</span><span class="pun">=</span><span class="pln">last1</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">;</span><span class="pln">
	last1</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">=</span><span class="pln">last2</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">;</span><span class="pln">
	last2</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">=</span><span class="pln">ptr</span><span class="pun">;</span><span class="pln">
	last1</span><span class="pun">=</span><span class="pln">last2</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> last1</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">create_list</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">int</span><span class="pln"> i</span><span class="pun">,</span><span class="pln">n</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">int</span><span class="pln"> data</span><span class="pun">;</span><span class="pln">
	printf</span><span class="pun">(</span><span class="str">"Enter the number of nodes : "</span><span class="pun">);</span><span class="pln">
	scanf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,&amp;</span><span class="pln">n</span><span class="pun">);</span><span class="pln">
	</span><span class="kwd">last</span><span class="pun">=</span><span class="pln">NULL</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">if</span><span class="pun">(</span><span class="pln">n</span><span class="pun">==</span><span class="lit">0</span><span class="pun">)</span><span class="pln">
		</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
	printf</span><span class="pun">(</span><span class="str">"Enter the element to be inserted : "</span><span class="pun">);</span><span class="pln">
	scanf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,&amp;</span><span class="pln">data</span><span class="pun">);</span><span class="pln">
	</span><span class="kwd">last</span><span class="pun">=</span><span class="pln">addtoempty</span><span class="pun">(</span><span class="kwd">last</span><span class="pun">,</span><span class="pln">data</span><span class="pun">);</span><span class="pln">
		
	</span><span class="kwd">for</span><span class="pun">(</span><span class="pln">i</span><span class="pun">=</span><span class="lit">2</span><span class="pun">;</span><span class="pln">i</span><span class="pun">&lt;=</span><span class="pln">n</span><span class="pun">;</span><span class="pln">i</span><span class="pun">++)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		printf</span><span class="pun">(</span><span class="str">"Enter the element to be inserted : "</span><span class="pun">);</span><span class="pln">
		scanf</span><span class="pun">(</span><span class="str">"%d"</span><span class="pun">,&amp;</span><span class="pln">data</span><span class="pun">);</span><span class="pln">
		</span><span class="kwd">last</span><span class="pun">=</span><span class="pln">addatend</span><span class="pun">(</span><span class="kwd">last</span><span class="pun">,</span><span class="pln">data</span><span class="pun">);</span><span class="pln">	
	</span><span class="pun">}</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="pln">

</span><span class="kwd">void</span><span class="pln"> display</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">p</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">if</span><span class="pun">(</span><span class="kwd">last</span><span class="pun">==</span><span class="pln">NULL</span><span class="pun">)</span><span class="pln">
	</span><span class="pun">{</span><span class="pln">
		printf</span><span class="pun">(</span><span class="str">"List is empty\n"</span><span class="pun">);</span><span class="pln">
		</span><span class="kwd">return</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="pln">
	p</span><span class="pun">=</span><span class="kwd">last</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">;</span><span class="pln">  </span><span class="com">/*p points to first node*/</span><span class="pln">
	</span><span class="kwd">do</span><span class="pln"> 
	</span><span class="pun">{</span><span class="pln">
		printf</span><span class="pun">(</span><span class="str">"%d "</span><span class="pun">,</span><span class="pln"> p</span><span class="pun">-&gt;</span><span class="pln">info</span><span class="pun">);</span><span class="pln">
		p</span><span class="pun">=</span><span class="pln">p</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">;</span><span class="pln">
	</span><span class="pun">}</span><span class="kwd">while</span><span class="pun">(</span><span class="pln">p</span><span class="pun">!=</span><span class="kwd">last</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">);</span><span class="pln">
	printf</span><span class="pun">(</span><span class="str">"\n"</span><span class="pun">);</span><span class="pln">
</span><span class="pun">}</span><span class="com">/*End of display( )*/</span><span class="pln">

</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">addtoempty</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">,</span><span class="kwd">int</span><span class="pln"> data</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">tmp</span><span class="pun">;</span><span class="pln">
	tmp </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*)</span><span class="pln">malloc</span><span class="pun">(</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node</span><span class="pun">));</span><span class="pln">
	tmp</span><span class="pun">-&gt;</span><span class="pln">info </span><span class="pun">=</span><span class="pln"> data</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">last</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tmp</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">last</span><span class="pun">-&gt;</span><span class="pln">link </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="com">/*End of addtoempty( )*/</span><span class="pln">

</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">addatend</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="kwd">last</span><span class="pun">,</span><span class="kwd">int</span><span class="pln"> data</span><span class="pun">)</span><span class="pln">
</span><span class="pun">{</span><span class="pln">
	</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*</span><span class="pln">tmp</span><span class="pun">;</span><span class="pln">
	tmp </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node </span><span class="pun">*)</span><span class="pln">malloc</span><span class="pun">(</span><span class="kwd">sizeof</span><span class="pun">(</span><span class="kwd">struct</span><span class="pln"> node</span><span class="pun">));</span><span class="pln">
	tmp</span><span class="pun">-&gt;</span><span class="pln">info </span><span class="pun">=</span><span class="pln"> data</span><span class="pun">;</span><span class="pln">
	tmp</span><span class="pun">-&gt;</span><span class="pln">link </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">-&gt;</span><span class="pln">link</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">last</span><span class="pun">-&gt;</span><span class="pln">link </span><span class="pun">=</span><span class="pln"> tmp</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">last</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tmp</span><span class="pun">;</span><span class="pln">
	</span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">last</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span><span class="com">/*End of addatend( )*/</span>

Output:

Enter the number of nodes : 3
Enter the element to be inserted : 55
Enter the element to be inserted : 43
Enter the element to be inserted : 24
Enter the number of nodes : 4
Enter the element to be inserted : 1
Enter the element to be inserted : 2
Enter the element to be inserted : 3
Enter the element to be inserted : 4
First list is :  55 43 24
Second list is :  1 2 3 4
Concatenated list is  : 55 43 24 1 2 3 4
Press any key to continue . . .

Explanation:

C Program to concatenate two circular linked lists

This Particular section is dedicated to Programs only. If you want learn more about Data Structure. Then you can visit below links to get more depth on this subject.