输入:1->2->4, 1->3->4 , 输出:1->1->2->3->4->4

108 阅读1分钟
package com.justalk.javademo.acm;


/**
 * 输入:1->2->4, 1->3->4
 * 输出:1->1->2->3->4->4
 */
public class ArrayListTest {

    static class ListNode {

        public ListNode(int var) {
            this.var = var;
        }

        int var;
        ListNode next;

        @Override
        public String toString() {
            StringBuffer stringBuffer = new StringBuffer();
            stringBuffer.append(var);
            while (next!=null) {
                stringBuffer.append("->");
                stringBuffer.append(next.var);
                next = next.next;
            }
            return stringBuffer.toString();
        }
    }

    public static void main(String[] args) {
        ListNode listNode = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode4 = new ListNode(4);
        listNode.next = listNode2;
        listNode2.next = listNode4;

        ListNode listNode1Copy = new ListNode(1);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4Copy = new ListNode(4);
        listNode1Copy.next = listNode3;
        listNode3.next = listNode4Copy;
        ListNode resultNodes = mergeSort(listNode, listNode1Copy);
        System.out.println(resultNodes);
    }

    private static ListNode mergeSort(ListNode first, ListNode second) {
        ListNode start = first;
        if (second != null && first != null) {
            //将second的数据有序的插入first
            while (second != null) {
                System.out.println("外部循环了一次");
                int var = second.var;
                while (first != null ) {
                    if (first.next != null) {
                        if (var >= first.var && var < first.next.var) {
                            System.out.println("内部插入了一次");
                            ListNode temp = new ListNode(var);
                            temp.next = first.next;
                            first.next = temp;
                            break;
                        }
                    } else {
                        if (var >= first.var) {
                            System.out.println("内部插入了一次");
                            ListNode temp = new ListNode(var);
                            temp.next = first.next;
                            first.next = temp;
                            break;
                        }
                    }
                    first = first.next;
                }
                first = start;
                second = second.next;
            }
        }
        return start;
    }
}