线性表合并java_单链表合并 - Java数据结构-线性表之单链表应用_Linux编程_Linux公社-Linux系统门户网站...

这篇博客介绍了如何将两个递增有序的Java单链表A和B合并为一个非递减有序的链表C。通过比较A和B链表节点的值,选择较小值插入到新链表C的头部或尾部,最终形成非递减有序的C链表。文章提供了具体的Java代码实现,强调了根据链表性质选择头插法或尾插法对性能的影响,算法时间复杂度为O(m+n)。
摘要由CSDN通过智能技术生成

问题详细描述:

将递增有序A、B两链表归并成一个按元素值非递增(允许有相同值)有序的链表C。

解题思路:

利用A、B两表递增有序的特点,依次取出当前结点进行比较,将当前值较小者摘下,插入到C表的头部,由于采用的是头插法,最先找到的最小值结点将会在C表的尾部,依次类推,所以得到的C表则为非递增有序的。这里的递增递减性质需要根据代码具体修改实现。已在代码中给出提示。

/**

* @TODO 两个数据元素类型为“整型”的递增(或者递减)单链表合并,由a单链表调用

* @param bFoll 单链表b

* @return c 单链表c

* (合并结果为非递减(或者非递增),取决于a,b链表的递增递减性质和合并函数的插入方法的选取)

*/

public FOLinkedList merge(FOLinkedList bFoll){

FOLinkedList c = new FOLinkedList();

FOLinkedNode a = (FOLinkedNode) this.header;

FOLinkedNode b = bFoll.header;

Integer eTemp = new Integer(0);

while(a != null && b != null){

if(a.getE()<=b.getE()){

eTemp = a.getE();

a = a.next;

}else{

eTemp = b.getE();

b = b.next;

}

//这里可以采用头插法,或者尾插法

c.add(eTemp);

// c.addFirst(eTemp);

}

if(a == null){

a = b;

}

while(a != null){

c.add(a.getE());

a = a.next;

}

return c;

}

将递增有序的A,B链表合并成非递减的链表C,采用尾插法即可实现。

具体操作需要根据代码来进行修改,上述代码中可以修改插入元素的方法为头插法或者尾插法。

该算法的时间性能由两待合并链表的的元素个数来决定,即为O(m+n)

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值