两个单链表的合并JAVA(无头节点)java

该文章介绍了如何在Java中合并两个已排序的单链表,无需头节点。方法是通过创建第三个链表,依次比较两个输入链表的节点值,将较小的节点添加到结果链表中,直至其中一个链表遍历完。如果一个链表遍历完而另一个未完,将剩余链表的剩余部分直接追加到结果链表。最后展示了代码实现和成功运行的结果。
摘要由CSDN通过智能技术生成

两个单链表的合并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 

4、结束语

谢谢观看 双击3连

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值