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

<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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值