数据结构和算法_链表合并

数据结构和算法_链表合并_第1张图片
数据结构和算法_链表合并_第2张图片
数据结构和算法_链表合并_第3张图片
数据结构和算法_链表合并_第4张图片
数据结构和算法_链表合并_第5张图片

public class Node {
    /**
     * 存储节点的值
     */
    public User data;

    public int num;
    /**
     * 存储下一个节点
     */
    public  Node next;

    public Node(User data) {
        this.data = data;
    }

    public Node(int num) {
        this.num = num;
    }
}

    /**
     * 单链表的合并
     */
    public Node  mergeLinkedList(){
        Node linkedListA = new Node(null);
        for(long i = 5; i>= 1; i--){
            Node node = new Node(new User(i));
            if (linkedListA.next == null) {
                linkedListA.next = node;
            } else {
                node.next = linkedListA.next;
                linkedListA.next = node;
            }
        }
        myToString(linkedListA);
        Node linkedListB = new Node(null);
        for(long i = 10; i>= 6; i--){
            Node node = new Node(new User(i));
            if (linkedListB.next == null) {
                linkedListB.next = node;
            } else {
                node.next = linkedListB.next;
                linkedListB.next = node;
            }
        }
        myToString(linkedListB);

        Node pa = linkedListA.next; //pa指针指向La的首结点
        Node pb = linkedListB.next; //pb指针指向Lb的首结点
        linkedListB = linkedListB.next; //释放表Lb的头结点(同理可以用Lb的头结点,释放La的头结点)
        Node pc = pa; //使用表La的头结点,pc为尾指针
        while (pa != null && pb != null){ //表La和表Lb均有结点(两者同样长度的部分)
            if(pa.data.getId() < pb.data.getId()){ //	如果pa指向的数据域小于或等于pb指向的数据域
                pc.next = pa; //(pa原来指向的结点)插在表Lc的尾结点之后(就是pc的下一个)
                pc = pa;  //(pa原来指向的结点)变成表Lc的新尾结点
                pa = pa.next; //pa结点移向La下一个结点
            }else {
                pc.next = pb; //(pb原来指向的结点)插在表Lc的尾结点之后(就是pc的下一个);
                pc = pb; //(pb原来指向的结点)变成表Lc的新尾结点
                pb = pb.next;//pb结点移向La下一个结点
            }
        }
        if(pa != null){ //表La比表Lb长
            pc.next = pa;
        }else {
            pc.next = pb; //插入表Lb的剩余段
        }
        myToString(pc);
        return pa;


    }

你可能感兴趣的:(数据结构与算法,算法,数据结构,链表)