日期:2014-05-20 浏览次数:20728 次
/** * 功能:把元素递增排 列的链表A和B合并为C,且C中元素递减排列,使用原空间 * 参数:LinkList类型la * 参数:LinkList类型 lb * 返回值:LinkList类型 * 例如:参数为:A={1,2,4,5},B={4,8},结果为:C={8,5,4,4,2,1}。 */ public static LinkList reverseMerger(LinkList la, LinkList lb) { LinkList lc = new LinkList(); int pointA = la.length; int pointB = lb.length; int pointAY = 1; int pointBY = 1; if(lc.head == null){ if(la.getData(pointA) > lb.getData(pointB)){ lc.listHeadInsert(la.getData(pointA)); pointA--; } else{ lc.listHeadInsert(lb.getData(pointB)); pointB--; } } while(pointAY <= pointA && pointBY <= pointB){ if(la.getData(pointAY) < lb.getData(pointBY)){ lc.listHeadInsert(la.getData(pointAY)); pointAY++; } else{ lc.listHeadInsert(lb.getData(pointBY)); pointBY++; } } if(pointAY <= pointA){ for(int j = pointAY; j <= pointA; j++){ lc.listHeadInsert(la.getData(j)); } } if(pointBY <= pointB){ for(int k = pointBY; k < pointB; k++){ lc.listHeadInsert(lb.getData(k)); } } return lc; } //测试用MAIN方法,上面的方法和这个测试的MAIN方法都丢在LinkList类中写的 public static void main(String[] args){ LinkList la = new LinkList(); LinkList lb = new LinkList(); la.listHeadInsert(1); la.listHeadInsert(5); la.listHeadInsert(4); la.listHeadInsert(2); lb.listHeadInsert(4); lb.listHeadInsert(8); LinkList lc = LinkList.reverseMerger(la, lb); for(int i = 1; i <= lc.length; i++){ System.out.println(lc.getData(i)); } }
------解决方案--------------------
思路就是:先把a,b两个链表的最大元素,也就是两个链表的最后一个元素的值取出来做比较,大的做合并后的链表c的头节点~
然后把a,b里面剩余的接点从小的开始比较,最小的插入到链表c的头节点后面,依次循环插入,最后,如果a中元素已经都插入到c中且b中还有剩余未插的,把b中剩余的元素按照由小到大的顺序插入到c中.