将两个乱序单链表归并为一个按元素值递减次序排列的单链表并计算表长。要求利用原来两个单链表的结点存放归并后的单链表

Java实现:   

 public class SinglyList {
    private LNode list;
    public LNode createByTail(int... nums) {
        list = new LNode();
        list.next = null;
        LNode tailNode = list;
        for (int i = 0; i < nums.length; i++) {
            LNode newNode = new LNode();
            newNode.data = nums[i];
            newNode.next = null;
            tailNode.next = newNode;
            tailNode = newNode;
        }
        return list;
    }
   public LNode sortList() {
        LNode head=list;
        sort(head,null);
        return head;
        }
    public void sort(LNode head,LNode end) {
                  if(head!=end) {
                    LNode p1=head;
                    LNode p2=head;
                    while(p2!=end) {
                        if(p2.data<head.data) {
                            p1=p1.next;
                            int temp=p1.data;
                            p1.data=p2.data;
                            p2.data=temp;
                        }
                        p2=p2.next;
                    }
                    if(p1!=head) {
                        int temp=p1.data;
                        p1.data=head.data;
                        head.data=temp;
                    }
                    sort(head,p1);
                    sort(p1.next,end);
                }
            }
    public void merge(SinglyList  A, SinglyList  B) {
        LNode aNode = A.list.next;
        LNode bNode = B.list.next;

        A.list.next = null;
        while (aNode != null && bNode != null) {
            if (aNode.data <= bNode.data) {
                LNode temp = aNode.next;
                aNode.next = A.list.next;
                A.list.next = aNode;

                aNode = temp;
                }
            else {
                LNode temp = bNode.next;
                bNode.next = A.list.next;
                A.list.next = bNode;

                bNode = temp;
            }
        }
        while (aNode != null) {
            LNode temp = aNode.next;

            aNode.next = A.list.next;
            A.list.next = aNode;

            aNode = temp;
        }
        while (bNode != null) {
            LNode temp = bNode.next;

            bNode.next = A.list.next;
            A.list.next = bNode;

            bNode = temp;
        }
    }   

    public void print() {
      
        LNode node = list.next;
        
        String str = "[";
        while (node != null) {
            
            str += node.data;
            if (node.next != null) {
                str += ", ";
            }
            
            node = node.next;
        }
        str += "]";
       
        System.out.println(str);
        
    }
    public void length() {
        LNode node=list.next;
        int length=0;
        while(node!=null) {
            node=node.next;
            length ++;
        }
        System.out.println(length);
    }
}

class LNode {
    
    int data;
   
    LNode next;
    
}





public class LinkedTest {
    public static void main(String[] args) {
        // 创建单链表 A
        SinglyList A = new SinglyList();
        A.createByTail(3,5,19,4,8);//1, 3, 5, 7, 9
        System.out.println("链表一为:");
        A.print();
        // 创建单链表 B
        SinglyList B = new SinglyList();
        B.createByTail(5,10,2,7,3);//2, 4, 5
        System.out.println("链表二为:");
        B.print();
        A.sortList();
        B.sortList();
        SinglyList list = new SinglyList();
        list.merge(A, B);
        System.out.println("新表为:");
        A.print();
        System.out.println("新表长度为:");
        A.length();
    }

结果为:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奶牛兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值