问答题 假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。【北京大学1998三、1(5分)】【厦门大学2006 1(3)(20/3分)】
【正确答案】正确答案:pla一>next ; q=lb一>next; //p,q分别是链表1a和1b的工作指针 la一>next:null; //1a作结果链表的头指针,先将结果链表初始化为空 while(p&&q) //当两链表均不为空时作 if(p一>da.ta<=q一>data) //合并同时逆置 {r=p一>next; //将p的后继结点暂存于r p一>next=la一>next; //将p结点链于结果表中,同时逆置 1a一>next=p ; p:r; //恢复p为当前待比较结点 } else//将*q链入结果表中,语句与上面类似,略 if(p)q=p; //避免再对p写下面的while语句 while(q!=null) //将一个剩余元素逆置,链入结果表中 {r=q一>next;q一>next:1a一>next; 1a一>next=q;q=r; }
【答案解析】