<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;
}
合并两个单链表,要求有顺序
最新推荐文章于 2022-12-19 10:29:12 发布