#include<iostream> #include<map> using namespace std; class node{ public: node():value(0),next(NULL){} ~node(){} int value; node* next; };///be careful this ; node* createlist(int a[],int n) { node* startnode = new node[n]; node* ret = startnode; for(int i = 0;i<n;i++) { startnode[i].value = a[i]; if(i<n-1) startnode[i].next = startnode + i + 1; } return ret; } node* helper(node * head1,node* head2) ///这种问题都可以试着用递归来计算,好像方便的多~ { if(head1 == NULL) return head2; if(head2 == NULL) return head1; ///多想想递归~~~ node* head; if(head1->value<head2->value) { head = head1; head->next = helper(head1->next,head2); }else { head = head2; head->next = helper(head1,head2->next); } return head; } int main() { int a[] = {1,3,5,7,9}; int b[] = {2,4,6,8,10}; node * t1 = createlist(a,sizeof(a)/sizeof(a[0])); node * t2 = createlist(b,sizeof(b)/sizeof(b[0])); node * head = helper(t1,t2); while(head) {cout<<" "<<head->value; head = head->next;} }
递归合并链表~
berkeleysong