/****************************************************************************************
*题目:合并两个排序的链表
* 输入两个递增排序的链表,合并这两个链表并使链表中的节点仍然是按照递增排序的。例如输入图3.7中的链表1和链表2,
* 则合并之后的升序链表如链表3所示。
*时间:2015年8月31日09:02:36
*文件:MergeLink.java
*作者:cutter_point
****************************************************************************************/
package bishi.Offer50.y2015.m08.d31;
import bishi.Offer50.y2015.m08.d26.*;
public class MergeLink
{
/**
* 这里两个链表是开始就是数据的链表,也就是头不是一个不放数据的链表
* 有点类似数组第一个位置不放数据,从第1个位置开始一样,这里的参数就是第一个位置放数据的数组
* @param pHead1
* @param pHead2
* @return
*/
public LinkNode merge(LinkNode pHead1, LinkNode pHead2)
{
if(pHead1 == null)
return pHead2;
else if(pHead2 == null)
return pHead1;
//我们合并之后的链表头
LinkNode pMergeHead = null;
if(pHead1.m_nValue < pHead2.m_nValue)
{
//如果第一个链表的当前节点值不第二个小
pMergeHead = pHead1;
pMergeHead.m_pNext = merge(pHead1.m_pNext, pHead2);
}//if
else
{
//如果第一个链表的当前节点比第二个大的话
pMergeHead = pHead2;
pMergeHead.m_pNext = merge(pHead1, pHead2.m_pNext);
}//else
return pMergeHead;
}
/**
* 当我们的链表中的第一个节点是无用的只是用来做为一个头结点的时候
* @param pHead1
* @param pHead2
* @return
*/
public LinkNode mergeResult(LinkNode pHead1, LinkNode pHead2)
{
if(pHead1 == null || pHead1.m_pNext == null)
return pHead2;
else if(pHead2 == null || pHead2.m_pNext == null)
return pHead1;
LinkNode mergeResult = new LinkNode();
mergeResult.m_pNext = merge(pHead1.m_pNext, pHead2.m_pNext);
return mergeResult;
}
@org.junit.Test
public void Test()
{
LinkList link = new LinkList();
link.addTail(8);link.addTail(7);link.addTail(6);link.addTail(5);link.addTail(4);link.addTail(3);
LinkList link2 = new LinkList();
link.addTail(2);link.addTail(1);link.addTail(0);link.addTail(-1);link.addTail(-2);link.addTail(-3);
MergeLink ml = new MergeLink();
LinkNode head = ml.mergeResult(link.getHead(), link2.getHead());
//逆序输出
LinkList.PrintListReversingly_Recursively(head);
}
}
【笔试】35、合并两个排序的链表
最新推荐文章于 2024-11-14 22:19:56 发布