1、2019年3月7日,北京林业大学信息学院,(1)将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。,算法设计题,2019年3月7日,北京林业大学信息学院,参考算法2.16,要单独考虑 pa-data = =pb-data,La(Lc),1,2,4,6,7,8,8,10,11,2019年3月7日,北京林业大学信息学院,void MergeList_L(LinkList /释放Lb的头结点,2019年3月7日,北京林业大学信息学院,(2)将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两
2、个链表的存储空间,不另外占用其他的存储空间。表中允许有重复的数据。,算法设计题,2019年3月7日,北京林业大学信息学院,(1)Lc指向La,(2) 依次从 La 或 Lb 中“摘取”元素值较小的结点插入到 Lc 表的表头结点之后,直至其中一个表变空为止,(3) 继续将 La 或 Lb 其中一个表的剩余结点插入在 Lc 表的表头结点之后,(4) 释放 Lb 表的表头结点,【算法思想】,2019年3月7日,北京林业大学信息学院,La,Lb,Lc,第(2)题实现过程动态演示,2019年3月7日,北京林业大学信息学院,void union(LinkList /释放Lb的头结点,2019年3月7日,北
3、京林业大学信息学院,(6)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。,【算法思想】类似于求n个数中的最大数 可假设第一个结点最大,用指针pmax指向。 然后用pmax依次和后面的结点进行比较,发现大者则用pmax指向该结点。 这样将链表从头到尾遍历一遍时,pmax所指向的结点就是最大者。其中的比较语句形式如下: if(p-data pmax-data) pmax=p;,算法设计题,2019年3月7日,北京林业大学信息学院,ElemType Max (LinkList L )pmax=L-next; /假定第一个结点中数据具有最大值p=L-next-next;while(p != N
4、ULL )/如果下一个结点存在if(p-data pmax-data) pmax=p;p=p-next;return pmax-data; ,2019年3月7日,北京林业大学信息学院,(7)设计一个算法,通过一趟遍历,将链表中所有结点的链接方向逆转,且仍利用原表的存储空间。,算法设计题,【算法思想】从首元结点开始,逐个地把链表L的当前结点p插入新的链表头部,2019年3月7日,北京林业大学信息学院,a1,a2,a3,L,p,a1,a2,a3,标志后继结点q 修改指针(将p插入在头结点之后) 重置结点p(p重新指向原表中后继),2019年3月7日,北京林业大学信息学院,void inverse(LinkList ,