/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) { // 入参为升序链表数组
ListNode ans = null;
for (int i = 0; i < lists.length; ++i) {
ans = mergeTwoLists(ans, lists[i]); //mergeTwoLists实现链表顺序合并功能
}
return ans;
}
//暴力解法,一轮循环合并两个链表,知道合并完为止
public ListNode mergeTwoLists(ListNode a, ListNode b) {
if (a == null || b == null) { // 判断链表a、b是否为空,为空直接返回另一个链表,省略合并
return a != null ? a : b;
}
ListNode head = new ListNode(0); // 创建新的链表头结点,最后返回head.next为合并链表
ListNode tail = head, aPtr = a, aPtr = b; // tail aPtr aPtr 分别为对应链表第一个元素
while (aPtr != null && bPtr != null) {//实现链表升序合并
if (aPtr.val < bPtr.val) {
tail.next = aPtr;//如果a的第一个节点小于b的第一个节点,将小的插入新链表,指针后移
aPtr = aPtr.next;
} else {
tail.next = bPtr;
bPtr = bPtr.next;
}
tail = tail.next;//将tail指针后移继续添加新节点
}
tail.next = (aPtr != null ? aPtr : bPtr);//将tail指针归为,归到链表表头,方便下次合并
return head.next;// 返回合并后的链表
}
}
Leecode23. 合并K个升序链表
最新推荐文章于 2024-08-02 17:06:55 发布