算法
文章平均质量分 70
关于学习算法的记录
a未来永远是个未知数
这个作者很懒,什么都没留下…
展开
-
JZ76 删除链表中重复的结点
描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。例如,链表 1->2->3->3->4->4->5 处理后为 1->2->5数据范围:链表长度满足 0≤n≤1000 ,链表中的值满足 1≤val≤1000进阶:空间复杂度 O(n) ,时间复杂度 O(n)原创 2023-12-03 19:01:55 · 62 阅读 · 0 评论 -
JZ35 复杂链表的复制
描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)。下图是一个含有5个结点的复杂链表。图中实线箭头表示next指针,虚线箭头表示random指针。为简单起见,指向null的指针没有画出。示例:输入:{1,2,3,4,5,3,5,#,2,#}输出:{1,2,3,4,5,3,5,#,2,#}原创 2023-12-03 17:17:36 · 160 阅读 · 0 评论 -
JZ22 链表中倒数最后k个结点
描述输入一个长度为 n 的链表,设链表中的元素的值为 a,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。数据范围:0≤n≤10,0≤a≤10,0≤k≤10要求:空间复杂度 O(n),时间复杂度 O(n)进阶:空间复杂度 O(1),时间复杂度 O(n)例如输入{1,2,3,4,5},2时,对应的链表结构如下图所示:其中蓝色部分为该链表的最后2个结点,所以返回倒数第2个结点(也即结点值为4的结点)即可,系统会打印后面所有的节点来比较。原创 2023-12-03 16:39:25 · 56 阅读 · 0 评论 -
JZ23 链表中环的入口结点
题目:给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。数据范围: n≤10000,1原创 2023-11-06 15:15:51 · 62 阅读 · 0 评论 -
JZ52 两个链表的第一个公共结点
输入两个无环的单向链表,找出它们的第一个公共结点,如果没有公共节点则返回空。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)数据范围: n≤1000要求:空间复杂度 O(1),时间复杂度 O(n)例如,输入{1,2,3},{4,5},{6,7}时,两个无环的单向链表的结构如下图所示:输入描述:输入分为是3段,第一段是第一个链表的非公共部分,第二段是第二个链表的非公共部分,第三段是第一个链表和第二个链表的公共部分。原创 2023-09-18 18:14:27 · 138 阅读 · 0 评论 -
JZ25 合并两个排序的链表
输入两个递增的链表,单个链表的长度为n,合并这两个链表并使新链表中的节点仍然是递增排序的。原创 2023-09-17 23:20:51 · 125 阅读 · 0 评论 -
链表思路记录2.JZ24 反转链表
最简单的一种方式就是使用栈,因为栈是先进后出的。实现原理就是把链表节点一个个入栈,当全部入栈完之后再一个个出栈,出栈的时候在把出栈的结点串成一个新的链表。双链表求解是把原链表的结点一个个摘掉,每次摘掉的链表都让他成为新的链表的头结点,然后更新新链表。给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。我的思路:递归,哈哈哈,我好爱用递归,我这个小菜鸡。原创 2023-09-12 16:47:00 · 115 阅读 · 0 评论 -
链表思路记录1.JZ6 从尾到头打印链表
元素入栈指的是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;元素出栈指的是从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈遵循"先进后出"(Last In First Out,LIFO)的原则,即最后放入栈的元素最先被取出。递归的思想也可以用栈实现,因为栈是先进后出的,符合逆序的特点,递归本质上就是用栈实现的。Stack类继承自Vector类,并提供了一些额外的方法,使其具有栈的特性。输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。原创 2023-09-12 14:51:53 · 92 阅读 · 0 评论