#include <cstdlib> #include <iostream> using namespace std; const int LIST_LENGHT = 10; typedef struct _NODE { int value; struct _NODE *next; _NODE(int val) : value(val), next(NULL){} }NODE, *PTRNODE; void createList(PTRNODE &head, int start) { PTRNODE curNode = NULL; int end = start + LIST_LENGHT; for(int i=start; i<end; i++) { if(head == NULL) { head = new NODE(i); curNode = head; } else { PTRNODE temp = new NODE(i); curNode->next = temp; curNode = curNode->next; } } } void mergeList(PTRNODE &res, PTRNODE list1, PTRNODE list2) { PTRNODE curNode = NULL; if(list1 == NULL) res = list2; else if(list2 == NULL) res = list1; else { if(list1->value <= list2->value) { res = list1; list1 = list1->next; } else { res = list2; list2 = list2->next; } curNode = res; while(list1 != NULL && list2 != NULL) { if(list1->value <= list2->value) { curNode->next = list1; list1 = list1->next; } else { curNode->next = list2; list2 = list2->next; } curNode = curNode->next; } if(list1 == NULL) curNode->next = list2; else curNode->next = list1; } } PTRNODE mergeListRecur(PTRNODE list1, PTRNODE list2) { PTRNODE head = NULL; if(list1 == NULL) return list2; if(list2 == NULL) return list1; if(list1->value <= list2->value) { head = list1; head->next = mergeListRecur(list1->next, list2); } else { head = list2; head->next = mergeListRecur(list1, list2->next); } return head; } void display(PTRNODE head) { if(head == NULL) return; while(head != NULL) { cout << head->value << " "; head = head->next; } cout << endl; } int main(int argc, char *argv[]) { PTRNODE list1 = NULL, list2 = NULL, res = NULL; createList(list1, 0); createList(list2, 10); mergeList(res, list1, list2); display(res); display(mergeListRecur(list1, list2)); system("PAUSE"); return EXIT_SUCCESS; } 非递归的方法还有问题...