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