算法学习
zfy1110
这个作者很懒,什么都没留下…
展开
-
【单链表】回文链表
【题】给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。示例 1: 输入:head = [1,2,2,1] 输出:true示例 2: 输入:head = [1,2] 输出:false进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?【分析】思路1:暴力解决,遍历链表后将数存储在数组中,然后根据数据是否对称去判断,此方法要借助额外数据结构存储数据思路2:利用快慢指针找到中间节点,再将后半部分链表原创 2021-09-18 15:50:57 · 411 阅读 · 0 评论 -
【单链表】反转链表
【题】:给你单链表的头节点head,请你反转链表,并返回反转后的链表。【分析】:一种解决方案是按原始顺序迭代结点,并将它们逐个移动到列表的头部。似乎很难理解。我们先用一个例子来说明我们的算法。算法概述让我们看一个例子:请记住,黑色结点 23 是原始的头结点。1. 首先,我们将黑色结点的下一个结点(即结点 6)移动到列表的头部:2. 然后,我们将黑色结点的下一个结点(即结点 15)移动到列表的头部:3. 黑色结点的下一个结点现在是空。因此,我们停止这一过程并返回新..原创 2021-09-11 17:47:24 · 206 阅读 · 0 评论 -
[单链表] 删除链表的倒数第N个节点
题:给你一个链表,删除链表的倒数第n个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head = [1,2], n = 1输出:[1]【分析】要使用一趟扫描遍历就实现这个结果,肯定不是暴力解决这么简单,因此需要思考有什么技巧使用双指针,慢指针为头结点,快指针先移动到节点n,...原创 2021-09-11 17:11:00 · 562 阅读 · 0 评论 -
[单链表] 相交链表
题:给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。注意,函数返回结果后,链表必须 保持其原始结构【分析】此处的关键在于先分别遍历求出两链表的长度,得出长度差,再让更长的一方先走长度等于长度差的距离后,两链表节点再同时前进,相交的节点即为相交节点【代码】import math# Definition ..原创 2021-09-11 11:11:04 · 72 阅读 · 0 评论 -
[单链表] 寻找环形链表的入口
1、在寻找环形链表的入口之前,如何判断链表是环形的?定义两个指针fast和slow,fast每次走两步,slow每次走一步,如果fast和slow可以相遇,说明链表带环。2、如何找到环形链表的入口?如图是一个环形链表。设a点为链表头结点,b点为环的入口点,c点为fast和slow的第一次相遇点。设ab长度为x,bc长度为y,z为环的长度。则fast在相遇前走的距离应该是:x+nz+y(n为fast运动的圈数)。slow的距离:x+y。因为fast的速度是slow的二.转载 2021-09-10 11:17:13 · 493 阅读 · 0 评论