合并几个有序链表用java实现
时间: 2023-10-02 15:04:43 浏览: 115
可以使用归并排序的思想来合并多个有序链表。具体实现可以参考下面的Java代码:
```java
public ListNode mergeKLists(ListNode[] lists) {
if (lists == null || lists.length == 0) {
return null;
}
return merge(lists, 0, lists.length - 1);
}
private ListNode merge(ListNode[] lists, int left, int right) {
if (left == right) {
return lists[left];
}
int mid = left + (right - left) / 2;
ListNode l1 = merge(lists, left, mid);
ListNode l2 = merge(lists, mid + 1, right);
return mergeTwoLists(l1, l2);
}
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;
}
}
```
其中,`mergeKLists`方法接收一个`ListNode`类型的数组,表示多个有序链表。首先判断数组是否为空或长度为0,如果是,则返回null;否则,调用`merge`方法来合并多个有序链表。
`merge`方法的实现使用了归并排序的思想。首先判断左右指针是否相等,如果相等,则直接返回该位置上的链表。否则,计算中间位置,分别递归调用`merge`方法来处理左右两个子数组,最后将左右两个有序链表合并成一个有序链表。
`mergeTwoLists`方法用来合并两个有序链表,实现方式与合并两个有序数组类似,需要用到递归。
阅读全文