您的位置:首页 > 其它

【笔试】35、合并两个排序的链表

2015-08-31 09:13 330 查看
/****************************************************************************************
 *题目:合并两个排序的链表
 *		输入两个递增排序的链表,合并这两个链表并使链表中的节点仍然是按照递增排序的。例如输入图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);
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: