给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6
第一道困难题,其实挺简单的,没想到有这么暴力,其实直接全部提取出来调用sort也可以过还80多分,用堆可以优化4ms,变成90多。思路几乎完全一样,多的收获就是heapq.heappop之后的堆还是堆,不需要再来一次,heapify()
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]
好妙好妙的递归真的,把接下来要处理的整个链表作为下一层递归,然后换一下头节点和下一个节点的位置,在每层递归中都只需要换这两个节点的位置就可以了,直接贴代码了
struct ListNode* swapPairs(struct ListNode* head){
if(head == NULL||head->next == NULL)return head;
struct ListNode *newhead = head->next;
head->next = swapPairs(newhead->next);
newhead->next = head;
return newhead;
}