合并两个单链表,要求有顺序

来源:互联网 发布:网络霸凌 编辑:程序博客网 时间:2024/05/16 08:43
<pre name="code" class="cpp">#include <iostream>using namespace std;struct node  { int value; node* next; }; node * make_list(int N); void display(node* ); node * merge(node*,node*); void sort(node*);int main(){int m,n;cout<<"请输入两个链表的长度:";cin>>m>>n;node* head1 = make_list(m);display(head1);sort(head1);display(head1);node *head2 = make_list(n);display(head2);sort(head2);display(head2);node* mergeHead = merge(head1,head2);display(mergeHead);return 0;}node *make_list(int N) { node *head = new node(); node *cur = head; for (int i = 0;i<N;i++) { cur->value = rand()%10; cur->next = new node(); cur= cur->next; } return head; }void display(node *head){ node* cur = head; while (cur) { cout<<cur->value<<" "; cur = cur->next; } cout<<endl;}void sort(node *head){ node *cur = head; while (cur) { node *min = cur; node *cur2 = cur->next; while (cur2) { if (cur2->value<min->value) min = cur2; cur2 = cur2->next; } int temp = cur->value; cur->value = min->value; min->value = temp; cur = cur->next; }}node *merge(node *head1,node*head2){ node *mcur = new node(); node *cur1 = head1; node *cur2 = head2; while (cur1&&cur2)//非常好!多看,记住! { if (cur1->value<cur2->value) { mcur->next=cur1; mcur = mcur->next; cur1 = cur1->next; } else { mcur->next = cur2; mcur = mcur->next; cur2 = cur2->next; } } if (cur1) mcur->next = cur1; else mcur->next= cur2; return head1->value<head2->value?head1:head2;}


                                             
0 0
原创粉丝点击