c数据结构,建立两个非递减的链表,然后合并为非递增链表

思路:
一,建立非递减链表:
思路:让p始终指向链表的最后一个结点,每次新建的结点s与l的从首元结点开始向后判断新输入的s->date与p->date的大小 ,直到找到比s->date大的结点,然后将新输入的结点插在p结点之前。

算法如下:

void InitList(LinkList &l,int n)
{
   
	l=new PNode;当需要一块新地址来存放数据时就需要用new动态分配内存,不然就像java一样没有分配实体,不能进行操作
	l->next=NULL;
	PNode *p,*s,*pre;//因为*p和*pre都是被已有的变量赋的初始值,他们的地址相同,不用分配新地址,所以不用用new
	for(int i=0;i<n;i++)
	{
   
		s=new PNode;
		cin>>s->date;
		p=l->next;
		pre=l;                                   //前驱指针,始终指向p的前一个结点,初始值指向l的头节点,必须要先给pre赋                 初始值,不然第一次循环时,pre还没有实体就被调用不合法 
		while(p&&s->date>p->date)				//当p不为0并且s->date比p->date大时,将p和pre向后一个
		{
   
			pre=p;
			p=p->next;
		}
		s=pre->next;							//当找到p->date大于s->date后,令pre->next指向s;
		s->next=p;
	}
}								//s的next的指向p;

二 ,两个非递减的链表合并为非递增链表(不占用新的内存)
思路:比较pa->date,pb->date的大小,取较小的插入到Lc的头结点之后

算法如下:

void MegerList(LinkList &La,LinkList 
  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值