# Hello World 2025年4月19日

118 阅读3分钟

今日收获:

1.如果你在任何事情上能进行一万次纠错,你就会成为这方面的专家。-纳瓦尔

2.有些东西你不去创造,就不会存在。 所有的欣慰都源于愤怒。

3.很多东西在你不太懂的情形之下,它也会慢慢发酵。所以我一直跟我的研究生说,有一些讲座,你一定要去听。 你听了第一次,不懂没关系,你第二次再去的话,你会觉得你多懂了一点,听过几次以后,你就可能慢慢的懂了。 我把这个叫做渗透性的学习方法。 这个渗透性的学习方法是中国传统上是不赞成的,但我认为这是一个非常重要的学习方法。 —— 杨振宁

第一点和第三点,其实有点殊途同归的意思了。我们都知道知行合一,这是第一层。但是很少有人知道第二层,行知合一,更进一步,先行后知,在干中学。

 今日刷题——算法题_1. 合并K个升序链表
 给你一个链表数组,每个链表都已经按升序排列。
 请你将所有链表合并到一个升序链表中,返回合并后的链表。

 示例 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
 

 我的题解:
class ListNode:#自己写的链表节点类
def __init__(self, val=0, next=None):#初始化链表节点
    self.val = val
    self.next = next

def __str__(self):#打印链表
    current=self
    result=[]
    while current:#遍历链表
        result.append(str(current.val))#将当前节点的值添加到列表中
        current=current.next##将当前节点指向下一个节点
    return "->".join(result)#将列表中的值用"->"连接起来,返回一个字符串表示链表


class Solution:#定义一个合并链表的类
    def merge_K_lists(self,lists,k):
        result=[]#定义一个空列表,用于存储合并后的链表
    
        for i in range(len(lists)):
            for j in range(len(lists[i])):
                result.append(lists[i][j])
              
        result.sort()
        linklist=convert_list(result)#把合并后的链表转换为链表
        return linklist#返回合并后的链表的头节点

def convert_list(arr):#把列表转换为链表
     if not arr:
         return None#如果数组为空,返回None
    head=ListNode(arr[0])#定义一个虚拟头节点,初始值为数组的第一个元素
    current=head#定义一个当前节点,初始值为头节点
    for val in arr[1:]:#遍历数组
        current.next=ListNode(val)#将当前节点的下一个节点指向下一个节点
        current=current.next#将当前节点指向下一个节点
    return head#返回头节点

if __name__=="__main__":
lists=[[1,4,5],[1,3,4],[2,6]]#定义一个链表的列表
k=3#定义链表的个数
solution=Solution()#创建一个合并链表的对象
merged_list = solution.merge_K_lists(lists, k) #合并链表
# merged_list1=[convert_list(list1) for list1 in lists] #将列表转换为链表
print(merged_list) #打印合并后的链表