合并两个有序递增的链表,使得合并后新链表还是有序的

原创 2016年08月22日 21:29:30

合并两个有序递增的单链表,使得合并后,新链表也是递增有序的。这里分别使用循环、递归实现合并有序链表

循环实现链表合并和递归实现链表的合并如下所示:

package cn.edu.nwu.structs.linklist;
/**
 * @author jcm
 *
 *时间 2016年8月22日
 */
public class MergeLinkList {
	/**
	 * @author jcm
	 * @param firstNodeHead 第一个链表的头指针,且链表是有序递增的
	 * @param twoNodeHead 第二个链表的头指针,且链表是有序递增的
	 * @return 返回一个有序的新链表的头指针
	 */
	public static Node mergeLinkList(Node firstNodeHead,Node twoNodeHead){
		//不存在第一个链表或者不存在第二个链表时,分别返回链表
		if(firstNodeHead == null){
			return twoNodeHead;
		}else if(twoNodeHead == null){
			return firstNodeHead ;
		}
		//定义新链表的头指针和当前结点
		Node newNodeHead = null;
		Node currentNode = null;
		//第一次初始化新链表的头指针和新结点
		if(firstNodeHead.data < twoNodeHead.data){
			newNodeHead = firstNodeHead;
			currentNode = firstNodeHead;
			firstNodeHead = firstNodeHead.next;
		}else{
			newNodeHead = twoNodeHead;
			currentNode = twoNodeHead;
			twoNodeHead = twoNodeHead.next;
		}
		//遍历两个链表的结点,并且比较大小,如果哪个链表的结点值最小,则把小的链表值赋给新链表
		while(firstNodeHead != null && twoNodeHead != null){
			if(firstNodeHead.data < twoNodeHead.data){
				currentNode.next = firstNodeHead;
				currentNode = currentNode.next;
				firstNodeHead = firstNodeHead.next;
			}else{
				currentNode.next = twoNodeHead;
				currentNode = currentNode.next;
				twoNodeHead = twoNodeHead.next;
			}
		}
		//如果第一个链表还没有比较完,则直接把第一个链表的剩下结点直接赋值给新链表
		if(firstNodeHead != null){
			currentNode.next = firstNodeHead;
		}else{
			currentNode.next = twoNodeHead;
		}
		return newNodeHead;
	}
	/**
	 * @author jcm
	 * 递归实现两个有序链表的合并
	 * @param firstNodeHead 第一个链表的头指针,且链表是有序递增的
	 * @param twoNodeHead 第二个链表的头指针,且链表是有序递增的
	 * @return 返回一个有序的新链表的头指针
	 */
	public static Node mergeLinkListRecursion(Node firstNodeHead,Node twoNodeHead){
		if(firstNodeHead == null){
			return twoNodeHead;
		}else if(twoNodeHead == null){
			return firstNodeHead;
		}
		//定义一个新链表的头指针
		Node newNodeHead = null;
		if(firstNodeHead.data < twoNodeHead.data){
			newNodeHead = firstNodeHead;
			newNodeHead.next = mergeLinkListRecursion(firstNodeHead.next,twoNodeHead);
		}else{
			newNodeHead = twoNodeHead;
			newNodeHead.next = mergeLinkListRecursion(firstNodeHead,twoNodeHead.next);
		}
		return newNodeHead;
	}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jcm666666/article/details/52280623

算法题:合并两个有序的链表

题目:已知有两个有序的单链表,其头指针分别为head1和head2,实现将这两个链表合并的函数: Node* ListMerge(Node *head1,Node *head2) ...
  • JXH_123
  • JXH_123
  • 2014-08-04 16:50:56
  • 18033

合并两个有序链表,让结果ren仍然有序

转载自: http://www.cnblogs.com/heyonggang/p/3405179.html   题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结...
  • tangaowen
  • tangaowen
  • 2016-06-06 21:52:27
  • 1050

两个有序链表序列的合并

02-线性结构1 两个有序链表序列的合并   (15分) 本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个递增的整数序列。 函数接口定义: List Merge( L...
  • ccDLlyy
  • ccDLlyy
  • 2016-09-24 15:55:16
  • 5954

将两个非递减的有序链表合并为一个非递增的有序链表(C语言编程实现)

将两个非递减的有序链表合并为一个非递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中允许有重复的数据。 #include #include typede...
  • sinat_25926481
  • sinat_25926481
  • 2015-10-11 16:46:32
  • 6068

合并两个递增排序的链表

题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。 package offer; public class MergeSortedLists { public ...
  • u013238950
  • u013238950
  • 2016-03-06 16:55:07
  • 416

两个有序单链表合并成一个有序单链表的java实现

两个有序单链表合并成一个有序单链表的java实现 -- 仅作为备注, 便于自己回顾....
  • kslinabc
  • kslinabc
  • 2016-10-20 20:01:30
  • 1853

数据结构 — 1. 两个非递减有序单链表合并为非递增有序单链表

题目描述: 两个非递减有序单链表合并为非递增有序单链表,不能增加新结点,可以增加新指针,不能利用循环链表,不能用顺序表,只能利用单链表本身的结点,通过改变指针的指向来获得结果。 #include #...
  • PeersLee
  • PeersLee
  • 2015-10-27 17:16:30
  • 3467

将两个有序链表合并成一个有序链表

问题定义:         写一个函数SortedMerge函数,该函数有两个参数,都是递增的链表,函数的功能就是合并这两个递增的链表为一个递增的链表,SortedMerge的返回值是新的链表。新链...
  • lalor
  • lalor
  • 2012-04-05 21:02:38
  • 50156

已知两个链表 la和 lb,其元素值递增排序。编程将la和lb合并成一个递减有序(相同值元素只保留一个)的链表lc。(北方名校经典试题) 本题选做

#include //compare.cpp #include "Node.h" #include "SimpleLinkList.h" using namespace std; template ...
  • leafinsnowfield
  • leafinsnowfield
  • 2015-09-30 12:41:21
  • 2109

将两个按元素值递增排序的单链表合并成一个按元素值递减的单链表

将两个按元素值递增排序的单链表合并成一个按元素值递减的单链表,要求使用原来的两个单链表节点存放合成后的单链表...
  • yfainaer
  • yfainaer
  • 2016-10-05 18:18:33
  • 1838
收藏助手
不良信息举报
您举报文章:合并两个有序递增的链表,使得合并后新链表还是有序的
举报原因:
原因补充:

(最多只允许输入30个字)