【Java】将两个有序链表合并为一个有序链表


public class Node
{
    private Node next;
    private Integer number;
    Node(Integer number)
    {
        this.number=number;
        next=null;
    }
    Node()
    {

    }
    public Node getNext() {
        return next;
    }
    public void setNext(Node next) {
        this.next = next;
    }
    public Integer getNumber() {
        return number;
    }
    public void setNumber(Integer number) {
        this.number = number;
    }

}


//合并链表
public class SortForLink {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr1 = {1,3,6,8,23,34,56,77,90};
        int[] arr2 = {-90,34,55,79,87,98,123,234,567};

        Node link1 = new Node();
        Node link2 = new Node();
        Node link3 = new Node();

        getLink(arr1,link1);
        getLink(arr2,link2);

        mergeLink(link1, link2, link3);

        viewLink(link3);



    }

    /**
     * 构建链表
     * @param arr
     * @param link
     */
    public static void getLink(int[] arr, Node link) {

        for(int i = 0; i < arr.length; i++) {
            link.setNumber(arr[i]);
            link.setNext(new Node());
            link = link.getNext();
        }

    }

    /**
     * 输出链表
     * @param link
     */
    public static void viewLink(Node link) {

        while(link.getNumber() != null) {
            System.out.println(link.getNumber());
            link = link.getNext();
        }
    }

    /**
     * 合并链表
     * @param link1
     * @param link2
     * @param link3
     */
    public static void mergeLink(Node link1, Node link2, Node link3) {

        if( (link2.getNumber() != null) && (link1.getNumber() == null || link1.getNumber() >= link2.getNumber()) ) {
            link3.setNumber(link2.getNumber());
            link3.setNext(new Node());
            link2 = link2.getNext();
            link3 = link3.getNext();
            mergeLink(link1, link2, link3);
        }else if( (link1.getNumber() != null) && (link2.getNumber() == null || link2.getNumber() > link1.getNumber()) ) {
            link3.setNumber(link1.getNumber());
            link3.setNext(new Node());
            link1 = link1.getNext();
            link3 = link3.getNext();
            mergeLink(link1, link2, link3);
        }else {
            System.out.println("==没有了,结束啦!==");
        }
    }

}

转载地址:https://blog.csdn.net/qq_43669007/article/details/91316984

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值