摘要: 链表基础知识 定义 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。 链表的操作 操作 时间复杂度 查找 O(n) 插入 O(1)(仅插入本身,加上查找就是O(n)) 删除 O(1)(仅删 阅读全文
posted @ 2020-11-21 16:44 大杂草 阅读(381) 评论(0) 推荐(0) 编辑
摘要: 方法一:分治 + 递归 解题思路 在21. 合并两个有序链表,我们知道如何合并两个有序链表。而本题是合并 k 个有序链表,可以通过大问题拆分成小问题解决,即把 k 个链表,拆分成 k/2 个链表组,俩俩合并,直到合并成一个链表,这就是分而治之的思想。 可以通过递归来实现分治算法: 定义函数功能:合并 阅读全文
posted @ 2020-11-21 16:41 大杂草 阅读(311) 评论(0) 推荐(0) 编辑
摘要: 解题思路 找到右边链表,再反转右边链表,然后按左、右逐一合并 代码 /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode next; * publi 阅读全文
posted @ 2020-11-21 16:09 大杂草 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 方法一:递归 解题思路 递归法,假设后续链表已经完成交换,此时只需要对前两个节点进行交换,然后再连接上后续已交换的链表即可。 代码 /** * Definition for singly-linked list. * public class ListNode { * public int val; 阅读全文
posted @ 2020-11-21 16:07 大杂草 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 方法一:递归 解题思路 通过递归法,每次判断目前头节点与给定的节点是否相等。如是,继续判断下一个节点,否则保存当前头节点,设置 next 指向下次递归得到的节点,然后返回当前节点。 代码 /** * Definition for singly-linked list. * public class 阅读全文
posted @ 2020-11-21 16:00 大杂草 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 解题思路 使用递归实现: 定义函数功能:合并两个有序链表,并返回链表的头 结束条件:两个链表其中一个为空,返回另一个链表 递推公式: l1.val < l2.val:l1.next = MergeTwoLists(l1.next, l2) l1.val >= l2.val:l2.next = Mer 阅读全文
posted @ 2020-11-21 15:23 大杂草 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 方法一:迭代 解题思路 遍历过程,同时反转,这里需要一个指针 pre 要保存前一个节点。 代码 /** * Definition for singly-linked list. * public class ListNode { * public int val; * public ListNode 阅读全文
posted @ 2020-11-21 09:13 大杂草 阅读(207) 评论(0) 推荐(0) 编辑