Java实现两个递增有序链表合并成一个递增有序链表和两个非递减有序链表合成一个非递增有序链表

代码如下:

package sjjgniub;

import java.util.LinkedList;
import java.util.Scanner;

@SuppressWarnings("all")
public class LinkList {

    private class Node
    {
        int data;
        Node next;

        public Node()
        {

        }

        public Node(int data)
        {
            this.data = data;
            next = null;
        }
    }

    Node head = null;

    public LinkList(){
        head = new Node();
        if (head==null)
        {
            System.out.println("Error");
            return;
        }
        head.next = null;
    }

    public void createList(int[] arr)
    {
        Node p = head;
        for (int i = 0;i<arr.length;i++) {
            Node s = new Node(arr[i]);
            p.next = s;
            p = s;
        }
    }

    public void createList()
    {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        Node p = head;
        for (int i = 0;i<n;i++)
        {
            int temp = sc.nextInt();
            Node s = new Node(temp);
            p.next = s;
            p = s;

        }
    }

    public void printList()
    {
        Node p = head.next;
        while(p!=null)
        {
            System.out.print(p.data+" ");
            p = p.next;
        }
        System.out.println();
    }

    //判断是否为递增有序链表
    public boolean isSurge(LinkList L)
    {

       if (L==null)
       {
           return false;
       }
       else if (L.head.next==null)
       {
           return true;
       }
       Node p = L.head.next;
       while(p.next!=null)
       {
           if (p.next.data < p.data)
           {
               return false;
           }
           p = p.next;
       }
       return true;
    }

    //将两个递增的有序链表合并为一个递增的有序链表
    public void mergeSurgeList(LinkList La)
    {
        if (La==null)
        {
            System.out.println("Error");
            return ;
        }

        if(!isSurge(La))
        {
            System.out.println("No surge");
            return ;
        }

        if (!isSurge(this))
        {
            System.out.println("No surge");
            return ;
        }




        Node pc = head;
        Node p1 = head.next;
        Node p2 = La.head.next;
        while(p1!=null && p2!=null)
        {
            if (p1.data > p2.data)
            {
                pc.next = p2;
                p2 = p2.next;
                pc = pc.next;
            }
            else if (p1.data < p2.data)
            {
                pc.next = p1;
                p1 = p1.next;
                pc = pc.next;
            }
            else
            {
                pc.next = p1;
                p1 = p1.next;
                p2 = p2.next;
                pc = pc.next;
            }
        }
        if (p1==null && p2==null)
        {
            pc.next = null;
        }
        else if (p1==null)
        {
            pc.next = p2;

        }
        else if (p2==null)
        {
            pc.next = p1;
        }
        La = null;


    }


    //将两个非递减的有序链表合并为一个非递增的有序链表
    public void mergeNotSurgeList(LinkList La)
    {
        if (La==null)
        {
            System.out.println("Error");
            return ;
        }
        if(!isSurge(La))
        {
            System.out.println("No surge");
            return ;
        }

        if (!isSurge(this))
        {
            System.out.println("No surge");
            return ;
        }

        Node pc = head;
        Node p1 = head.next;
        Node p2 = La.head.next;
        pc.next = null;
        while(p1!=null&& p2!=null)
        {
            if (p1.data >= p2.data)
            {
                Node tmp = p2.next;
                p2.next = pc.next;
                pc.next = p2;
                p2 = tmp;
            }
            else
            {
                Node tmp = p1.next;
                p1.next = pc.next;
                pc.next = p1;
                p1 = tmp;
            }
        }

	 while(p2!=null)
       {
           Node tmp = p2.next;
           p2.next = pc.next;
           pc.next = p2;
           p2 = tmp;
       }

       while(p1!=null)
       {
           Node tmp = p1.next;
           p1.next = pc.next;
           pc.next = p1;
           p1 = tmp;
       }

        La = null;

    }

}

测试类:

package sjjgniub;

public class TestList {
    public static void main(String[] args) {
        LinkList linkList = new LinkList();
        int[] arr1 = {1,56,234,423,1000};
        linkList.createList(arr1);
        linkList.printList();
        LinkList linkList2 = new LinkList();
        int[] arr2 = {213,423,1000};
        linkList2.createList(arr2);
        linkList2.printList();
        System.out.println();

      //  linkList.mergeSurgeList(linkList2);
        linkList.mergeNotSurgeList(linkList2);
        linkList.printList();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值