struct list { int value; list* next; }; list * merge (list *list1_head, list*list2_head);
list *merge(list *list1_head,list *list2_head) { list *newlist = NULL; list *current = NULL; while(NULL!=list1_head && NULL!=list2_head) { if(list1_head->value > list2_head->value) { current = list1_head->next; list1_head->next = newlist; newlist = list1_head; list1_head = current; } else { current = list2_head->next; list2_head->next = newlist; newlist = list2_head; list2_head = current; } } while(NULL!=list1_head) { current = list1_head->next; list1_head->next = newlist; newlist = list1_head; list1_head = current; } while(NULL!=list2_head) { current = list2_head->next; list2_head->next = newlist; newlist = list2_head; list2_head = current; } return newlist; }
structlist1{intvalue;list1* next;};list1 * merge (list1 *list1_head, list1 *list2_head){list1* head=NULL,*p=NULL;if(list1_head->value<list2_head->value){ head=list1_head;list1_head=list1_head->next;}else{ head=list2_head;list2_head=list2_head->next;}p=head;while(list1_head&&list2_head){if(list1_head->value<list2_head->value){ head->next=list1_head;head=list1_head;list1_head=list1_head->next;}else{ head->next=list2_head;head=list2_head;list2_head=list2_head->next;}}if(list2_head==NULL&&list1_head==NULL)return p;if(!list2_head)head->next=list1_head;if(!list1_head)head->next=list2_head;return p;}
list* merge(list *list1_head, list *list2_head){
list* pRet = NULL;
while(list1_head!= NULL || list2_head!= NULL){
list* node = new list;
node->next = NULL;
if( ( list2_head != NULL && list1_head != NULL && (list1_head->value > list2_head->value)) || (!list2_head && list1_head)){
node->value = list1_head->value;
list1_head = list1_head->next;
}else{
node->value = list2_head->value;
list2_head = list2_head->next;
}
node->next = pRet;
pRet = node;
}
return pRet;
}