目录

三个月算法进阶--day11

链表如何遍历更优雅?

leetcode第23题合并K个升序数组

双指针,一个遍历,一个定位插入

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

def merge2list(alist, blist):
    ans = alist
    prev = ListNode(None, ans)
    ptr = ans
    while blist != None:
        insert_value = blist.val
        while ptr != None:
            if insert_value <= ptr.val:
                prev.next = ListNode(insert_value, ptr)
                if prev.val == None:
                    ans = prev.next
                prev = prev.next
                break
            ptr = ptr.next
            prev = prev.next
        else:
            prev.next = ListNode(insert_value)
            prev = prev.next
        blist = blist.next
    return ans
def merge2list(alist, blist):
    if not alist return blist
    if not blist return alist
    head = ListNode()
    tail = head
    while alist and blist:
        if alist.val < blist.val:
            tail.next = alist
            alist = alist.next
        else:
            tail.next = blist
            blist = blist.next
        tail = tail.next
    tail.next = alist if alist else blist
    return head.next
def merge2list(alist, blist):
    if not alist: return blist
    if not blist: return alist
    if alist.val < blist.val:
        alist.next = merge2list(alist.next, blist)
        return alist
    else:
        blist.next = merge2list(blist.next, alist)
        return blist

优先队列用二叉堆

heap = []
heapq.heappush(heap, num)
heapq.heappop(heap)  # 弹出最小元素
heapq.heapify(nums)

分治,Left && Right

def merge(left, right):
    if left > right:
        return
    if left == right:
        return lists[left]
    mid = (left + right) // 2
    l1 = merge(left, mid)
    l2 = merge(mid+1, right)
    return