多个有序链表合并

114 阅读1分钟

在Java中,合并多个有序链表可以通过使用归并排序的思想来实现。下面是一个简单的示例代码,演示如何合并多个有序链表:

class ListNode {
    int val;
    ListNode next;
    ListNode(int x) { val = x; }
}

public class MergeSortedLists {
    public ListNode mergeKLists(ListNode[] lists) {
        if (lists == null || lists.length == 0) {
            return null;
        }

        return mergeLists(lists, 0, lists.length - 1);
    }

    private ListNode mergeLists(ListNode[] lists, int start, int end) {
        if (start == end) {
            return lists[start];
        }

        int mid = start + (end - start) / 2;
        ListNode left = mergeLists(lists, start, mid);
        ListNode right = mergeLists(lists, mid + 1, end);

        return mergeTwoLists(left, right);
    }

    private ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        }
        if (l2 == null) {
            return l1;
        }

        if (l1.val < l2.val) {
            l1.next = mergeTwoLists(l1.next, l2);
            return l1;
        } else {
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }
}

这个示例代码中,ListNode 表示链表节点,mergeKLists 方法接收一个 ListNode 数组,表示多个有序链表,然后调用 mergeLists 方法进行递归的分治合并。mergeTwoLists 方法用于合并两个有序链表。请注意,这只是一个示例,具体实现可能会根据实际需求和数据结构的定义有所不同。