This is the most common interview question and most commonly required algorithm for writing any code.
Metaphor
Consider you are planning a trip in office and got 2 lists which has names listed on it in alphabetical order. You need to merge these two files to get a master participant list. Now, for this you can do a simple merge of the two lists to generate a single list.
Concept
For merging two lists is a most common algorithm required in many programs. Its similar to the merge algorithm over array where we split the list into 2 and merge. Here, we get 2 lists. We just merge them into a single list and return it.
Code
Using extra memory
1: 2: List* merge_lists(List *a1, List *a2) 3: { 4: List *c = 0;5: while(a1 !=0 && a2!=0)
6: {7: if(a1->data > a2->data)
8: {9: if(c == 0)
10: c=createNode(a2->data);11: else {
12: append(c, createNode(a2->data)); 13: } 14: 15: a2 = a2->next; 16: }17: else
18: {19: if(c == 0)
20: c=createNode(a1->data);21: else {
22: append(c, createNode(a1->data)); 23: } 24: 25: a1 = a1->next; 26: } 27: } 28: 29: List *iter = c;30: while(iter->next !=0) iter = iter->next;
31: if(a2 != 0)
32: iter->next = a2;33: else
34: iter->next = a1;35: return c;
36: } 37: 38: void main()
39: { 40: List *list1 = createNode(2); 41: append(list1, createNode(3)); 42: append(list1, createNode(5)); 43: append(list1, createNode(10)); 44: 45: List *list2 = createNode(1); 46: append(list2, createNode(4)); 47: append(list2, createNode(9)); 48: append(list2, createNode(12)); 49: 50: List *list3 = merge_lists(list1, list2); 51: }There are interview questions like merge a1 and a2 and place it in a1 without using extra space. We will discuss about this tomorrow.
Important points
-
Merge algorithm on-place is very complex and mostly theoretical. We will concentrate on interview questions like How to sort 100GB worth of strings in the coming articles.
-
Note that the remaining list at the end is blindly appended to the new list.
No comments:
Post a Comment