java实现:两个有序链表的合并

本文介绍了一种链表合并的方法,并提供了完整的Java实现代码。通过输入指定数量的元素,创建两个链表,然后将这两个链表按升序合并并输出。文章包含了一个用于创建链表的实用函数和一个用于合并链表的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行结果如下:

有一次看到博客http://blog.sina.com.cn/s/blog_a19e8c1b01016d1x.html 发现不是很对,于是进行了修改,修改后可以正常运行

代码如下:

在我的代码中头结点是有内容的

package test16;

import java.util.Scanner;

public class Linklist {
    public static void main(String args[]) {
        Node la, lb, lc;
        la = creat_list(5);
        lb = creat_list(4);
        lc = la;
       // print_list(la);
        //PRINT_LIST(LB);
       // merge_list(la, lb);
        print_list(merge_list(la, lb));
    }
    // 链表创建方法
    static Node creat_list(int n) {
        System.out.println("input "+n+" values:");
        Scanner scn = new Scanner(System.in);
        Node p, head = null,t = null;
        //head = new Node();
        //head.next = null;
        for (int i = 0; i < n; i++) {
            if(i==0){
                head =new Node();
                head.data=scn.nextInt();
                head.next=null;
                t=head;
                continue;
            }
           // while (t.next!=null) t=t.next;
            p = new Node();
            p.data = scn.nextInt();
            p.next=null;
            t.next = p;
            t=p;
        }
        return head;
    }
    static Node merge_list(Node la, Node lb) {
        Node pa, pb, pc=null,lc=null,pt;
        pa = la;
        pb = lb;
        //lc = pc;
        int i=0;
        while ((pa != null) && (pb != null)) {
            if(i==0) {
                if (pa.data <= pb.data) {
                    pc = pa;
                    pa = pa.next;
                } else {
                    pc = pb;
                    pb = pb.next;
                }
                lc=pc;
                i++;
                continue;
            }
            if (pa.data <= pb.data) {
                pc.next = pa;
                pc=pa;
                pa = pa.next;
            } else {
                pc.next = pb;
                pc=pb;
                pb = pb.next;
            }

        }
        pc.next = (pa==null)?pb:pa;
        return lc;
    }
    // 链表打印输出方法
    static void print_list(Node head) {
        Node p;
        p = head;
        while (p != null) {
            System.out.println("[" + p.data + "]");
            p = p.next;
        }
    }
}
//节点类声明
class Node {
    int data;
    Node next;
}

 

转载于:https://www.cnblogs.com/huanglei2010/articles/7801998.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值