思路:
一,建立非递减链表:
思路:让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