合并两个有序链表

写这个小函数的时候,F10 和F11帮了我很大的忙

合并两个有序链表,这两个链表的头指针分别为head和head1,将头指针为head1的链表合并到头指针为head的链表中。

//合并两个有序链表,将头指针为head1的链表合并到头指针为head的链表中。
List MergeList(List head,List head1)
{
	ListNode *p1=head;
	ListNode *p2=head1;
	ListNode *pre=NULL;
	ListNode *temp;
	if(head==NULL)//如果开始时链表head为空,直接返回链表头指针head1;
	{
		return head1;
	}
	if(head1==NULL)//如果开始时链表head1为空,直接返回链表头指针head
		return head;
	while( p2!=NULL &&  p1!=NULL )
	{
		temp=p2->next;//这一句非常非常关键,保存链表的下一个节点,因为下面p2->next会发生变化
		if(p1->item <= p2->item)
		{
			pre=p1;
			p1=p1->next;
			continue;
		}
		if(pre==NULL)//当head->item 大于 head1->item时
		{
			p2->next=head;
			head=p2;
			pre=p2;
		}
		else
		{
			pre->next=p2;
			p2->next=p1;
		}
		p2=temp;
	}
	if(p1==NULL)//如果p1先指向链表链表的末端,由于pre->next=p1;p1=NULL;所以直接pre->next=NULL;
	{
		pre->next =p2;
	}
	return head;
}

测试用例的设计要考虑这样几种输入:

(1)链表1(头指针为head)为空时;

(2)链表2(头指针为head1)为空时;

(3)开始时,链表1的值大于链表2的值

(4)链表1先结束


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值