思路一:新建一个头节点,将原来的两个链表的节点依次插入到新节点之后~
(也有其他的思路,比如不新建一个头节点,直接在原来的基础之上进行交换,但是感觉思路以及实现上面没有第一个思路来得清晰简单。 以后再实现吧~)
一个bug 如果两个链表中有一个为空时 此时会出错
解决思路: 就检测第一个链表。如果为空,则直接返回第二个链表。无论第二个是否为空都行。
这个是节点
public class IntNode {
int value;
IntNode next;
public IntNode(int value, IntNode next) {
this.value = value;
this.next = next;
}
}
以下是main()方法
public class ListMerge {
public static void main(String[] args) {
//Linked List Construction
IntNode a1 = new IntNode(1, null);
IntNode a2 = new IntNode(2, null);
IntNode a3 = new IntNode(7, null);
IntNode b1 = new IntNode(3, null);
IntNode b2 = new IntNode(4, null);
IntNode b3 = new IntNode(8, null);
a1.next = a2;
a2.next = a3;
b1.next = b2;
b2.next = b3;
IntNode head1 = a1;
IntNode head2 = b1;
//temp variables
IntNode t = null;
//create new head
IntNode head = null;
if(head1.value < head2.value) {
head = head1;
head1 = head1.next;
} else {
head = head2;
head2 = head2.next;
}
head.next = null;
t = head;
//merge into new linked list
while( head1 != null && head2 != null ) {
if(head1.value < head2.value) {
t.next = head1;
head1 = head1.next;
} else {
t.next = head2;
head2 = head2.next;
}
t = t.next;
t.next = null;
}
//merge left ones
if(head1 != null) {
t.next = head1;
} else if(head2 != null){
t.next = head2;
}
//free space
head1 = null;
head2 = null;
//print all nodes
t = head;
while(t != null) {
System.out.print(t.value + " ");
t = t.next;
}
}
}
分享到:
相关推荐
将两个有序的链表合并为一个有序链表,链表的大小是可变的
C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表C#单向链表
1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)...利用算法5建立两个非递减有序单向链表,然后合并成一个非递增链表。
C++版本将两个有序链表合并为一个新的有序链表并返回原理及代码实现
将一个单向链表反向连接
何将两个有序链表并为一个有序链表。
本文是关于如何将两个有序链表并为一个有序链表。
c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,c++实现单向链表逆转,
单向链表架构代码,适合学习链表的学生学习!内附排序函数,打印函数,链表尾添项函数,删除函数。
C#单向链表的实现的源码
两个有序链表,合成为一个有序链表。文档中为升序模式。如果有需要的朋友们可以参考下代码。时间复杂度m+n,空间复杂度为2(m+n)
两个非递减合并成非递增 将一个链表分解成两个链表 /建立递增有序的单向链表 非递减有序链表中插入元素 元素逆置 遍历单向链表 建立输入n个元素带头结点的单链线性表
04.单向链表以及单向链表的应用.ppt
这是一个单向链表,它具有插入与删除节点的功能。Entry类实现了链表的各节点。
从键盘输入两个链表,通过程序对他们排序,之后按递增顺序合并链表
这是在面试中很常见的一个例子,实现单向链表的逆转,这个例子是用递归法实现的,一个简单的单向链表的例子
两个有序链表合并 链表插入 删除 修改等
1.航班管理员可以——添加航班——查询航班信息——修改航班信息——查询乘客信息(管理员登陆口令:123456) 2.乘客可以——查询航班信息——订票——退票 3.航班链表为单向顺序链表,乘客链表为双向非循环顺序链表
Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现单向链表Java SE程序 类实现...
slist.h为单向链表,blist为双向链表