× {{alert.msg}} Never ask again
Get notified about new tutorials RECEIVE NEW TUTORIALS

[Algorithm] Merge two sorted link list without using recursion

Shikhill Gupta
Sep 12, 2015
<p>#include &lt;iostream&gt;</p> <p>&nbsp;</p> <p>class Node;</p> <p>&nbsp;</p> <p>Node * CreateLinkList(int array[], int length);</p> <p>Node* Merge (Node* head1, Node* head2);</p> <p>&nbsp;</p> <p>void printNodes(Node * head);</p> <p>&nbsp;</p> <p>class Node {</p> <p>&nbsp; &nbsp; public:</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; int data;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; Node* Next;</p> <p>};</p> <p>&nbsp;</p> <p>int main(int argc, const char * argv[]) {</p> <p>&nbsp; &nbsp; // insert code here...</p> <p>&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; int array1[4] = {3,6,8,9};</p> <p>&nbsp; &nbsp; int array2[5] = {2,5,7,9,10};</p> <p>&nbsp;&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; Node * head1 = CreateLinkList(array1, 4);</p> <p>&nbsp;&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; Node * head2 = CreateLinkList(array2, 1);</p> <p>&nbsp;&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; Node * head3 = Merge(head1, head2);</p> <p>&nbsp;&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; printNodes(head3);</p> <p>&nbsp;&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; getchar();</p> <p>&nbsp; &nbsp; return 0;</p> <p>}</p> <p>&nbsp;</p> <p>Node * CreateLinkList(int array[], int length)</p> <p>{</p> <p>&nbsp; &nbsp; Node * head = NULL;</p> <p>&nbsp; &nbsp; Node * current = NULL;</p> <p>&nbsp;&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; for (int i = 0; i&lt;length; i++) {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; Node * node = (Node *)malloc(sizeof(Node));</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; node-&gt;data = array[i];</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; node-&gt;Next = NULL;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; if (head == NULL) {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head = node;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = node;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; else {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = node;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = node;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; return head;</p> <p>}</p> <p>void printNodes(Node * head)</p> <p>{</p> <p>&nbsp; &nbsp; while (head != NULL) {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; std::cout&lt;&lt;head-&gt;data &lt;&lt;"--&gt;";</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; head = head-&gt;Next;</p> <p>&nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; std::cout&lt;&lt;"\n";</p> <p>}</p> <p>&nbsp;</p> <p>Node* Merge (Node* head1, Node* head2)</p> <p>{</p> <p>&nbsp;&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; Node * newHead = NULL;</p> <p>&nbsp; &nbsp; Node * current = NULL;</p> <p>&nbsp; &nbsp;</p> <p>&nbsp; &nbsp; while (head1 != NULL || head2 != NULL) {</p> <p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; if(head1 != NULL &amp;&amp; head2&nbsp; != NULL) {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(head1-&gt;data &gt;= head2-&gt;data) {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(current == NULL){</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newHead = head2;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head2 = head2-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = newHead;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = NULL;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {</p> <p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = head2;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = head2;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head2 = head2-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = NULL;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(current == NULL){</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newHead = head1;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head1 = head1-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = newHead;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = NULL;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {</p> <p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = head1;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = head1;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head1 = head1-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = NULL;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; else {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(head1 == NULL)</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(newHead == NULL){</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newHead = head2;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = head2;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head2 = head2-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = NULL;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = head2;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = head2;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head2 = head2-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(head2 ==&nbsp; NULL) {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(newHead == NULL) {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; newHead = head1;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = head1;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head1 = head1-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = NULL;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else {</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current-&gt;Next = head1;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; current = head1;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; head1 = head1-&gt;Next;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; &nbsp; &nbsp; }</p> <p>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</p> <p>&nbsp; &nbsp; }</p> <p>&nbsp; &nbsp; return newHead;</p> <p>}</p>