郑州微网站,保险网站建设的总体目标,电商卖什么产品有前景,网站建设的要求有哪些思路
有了合并两个链表的基础后#xff0c;这个的一种方法就是可以进行顺序合并#xff0c;我们可以先写一个函数用来合并两个链表#xff0c;再在合并K个链表的的函数中循环调用它。
解题过程
解析这个函数 首先#xff0c;可以先判断#xff0c;如果a为空#xff0c…思路
有了合并两个链表的基础后这个的一种方法就是可以进行顺序合并我们可以先写一个函数用来合并两个链表再在合并K个链表的的函数中循环调用它。
解题过程
解析这个函数 首先可以先判断如果a为空则返回b。如果b为空则返回a。
在合并链表时我们需要一个head保存合并之后链表的头我们可以把head设为一个虚拟的头不保存val。
其次我们还需要一个指针(cur)记录下一个插入位置的前一个位置。
我们还需要设置pa,pb指针来对a,b链表进行遍历
当pa和pb都非空时
若pa-val pb-val则将pa插入到cur的后面pa向后移动一个。
若pa-val pb-val则将pb插入到cur的后面pb向后移动一个。
两个插入完之后cur都需要向后移动一个方便下次插入。 循环结束之后运用三元运算符若pa不为空则cur直接接上pa剩下的。反之接上pb。合并完链表后返回head.next 遍历lists:
将空链表不断与list中的数据进行合并
最后返回ans。
代码
//顺序合并
class Solution {
public:ListNode* mergeTwoLists(ListNode* a, ListNode* b){if(!a)return b;if(!b)return a;ListNode head, *cur head, *pa a, *pb b;while(pa pb){if(pa-val pb-val){cur-next pa;pa pa-next;}else{cur-next pb;pb pb-next;}cur cur-next;}cur-next (pa ? pa : pb);return head.next;}ListNode* mergeKLists(vectorListNode* lists) {ListNode* ans nullptr;for(int i 0; i lists.size();i){ans mergeTwoLists(ans, lists[i]);}return ans;}
};