两个单链表的合并JAVA(无头节点)
1、分析
将两个有序的单链表合并成一个有序的单链表,本人的思路是利用第三个单链表存储两个单链表的节点,若两个链表均为空,则直接返回;若其中一个链表为空,则直接将另一个链表连接至链表3上;若两个链表均不为空,先将其中一个链表1连接至链表3,然后遍历另一个链表2,将链表2中的节点按照顺序连接至链表3上。若出现链表3遍历完毕但链表2尚未遍历完毕的情况,可以直接将链表2剩下的节点连接至链表3尾部。
2、代码
public class LinkedList {
public static void main(String[] args) {
Node l1 =new Node(1,
new Node(4,
new Node( 3, null)));
Node l2 =new Node(2,
new Node(5,
new Node( 6, null)));
Node l3= l1.merge1(l1,l2);
l3.print();
}
//内部类
static class Node {
int val;
Node next;
public Node() {
super();
}
public Node(int val, Node next) {
super();
this.val = val;
this.next = next;
}
//打印
public void print(){
Node temp = this;
while (temp != null){
System.out.print(String.format("%s ",temp.val));
temp = temp.next;
}
System.out.println();
}
//合并
public static Node merge(Node head1, Node head2) {
//创建一个temp
Node headTemp=new Node(-1,null);
Node temp=headTemp;
if(head1 ==null) {
return head2;
}
if(head2 ==null) {
return head1;
}
//先把左右两边(有序)的数据按照规则填充到temp
//直到左右两边的有序序列,有一边处理完毕为止
while(head1!=null && head2!=null) {
if(head1.val<=head2.val) {
temp.next=head1;
head1=head1.next;
}else{
temp.next=head2;
head2=head2.next;
}
temp=temp.next;
}
//把有剩余数据的一边的数据依次全部填充到temp
if(head1 !=null) {
temp.next=head1;
}
if (head2 != null) {
temp.next=head2;
}
return headTemp.next;
}
}
}
3、成功展示
1 2 2 3 4 5 6