KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
This is one of the programming questions asked during written test from Microsoft. I am giving the question and the answer that I came up with. Thing is my answer although looks comprehensive (at least to me), I feel that the number of lines can be reduced. It was asked in C and I am a Java person but I managed to code it (my answer may contain too many Java like syntaxes) Ok, here is the question. You have two lists that are already sorted, you have to merge them and return a new list without any new extra nodes. The returned list should be sorted as well. The method signature is, Node* MergeLists(Node* list1, Node* list2); struct Node{ int data; Node *next; } The following is the solution I came up with, Node* MergeLists(Node* list1, Node* list2){ Node* mergedList; if(list1 == null && list2 ==null){//if both are null, return null return null; } if(list1 == null){//if list1 is null, simply return list2 return list2; } if(list2 == null){//if list2 is null, simply return list1 return list1; } if(list1.data < list2.data){//initialize mergedList pointer to list1 if list1's data is lesser mergedList = list1; }else{//initialize mergedList pointer to list2 if list2's data is lesser or equal mergedList = list2; } while(list1!=null && list2!=null){ if(list1.data < list2.data){ mergedList->next = list1; list1 = list1->next; }else{ mergedList->next = list2; list2 = list2->next; } } if(list1 == null){//remaining nodes of list2 appended to mergedList when list1 has reached its end. mergedList->next = list2; }else{//remaining nodes of list1 appended to mergedList when list2 has reached its end mergedList->next = list1; } return
Tags (comma-separated)
Save Edits
Cancel