题目简介:请判断一个链表是否为回文链表。
示例 1:
12输入: 1->2输出: false
示例 2:
12输入: 1->2->2->1输出: true
进阶:你能否用 O(n) 时间复杂度和 O(1) 空间复杂度解决此题?
思路:
找到中间结点(若长度为奇数,则返回第n/2 + 1个结点;若长度为偶数,则返回第n/2个结点)
切断前后两半,将后一半逆转
前后链表逐个进行比较,若最后前一半链表剩下的结点数不超过1,则说明为回文链表
代码如下:123456789101112131415161718192021222324252627282930313233343...
题目简介:字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
示例 1:
123456输入:S = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca", "defegde", "hijhklij"。每个字母最多出现在一个片段中。像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分...
题目简介:你的朋友正在使用键盘输入他的名字 name。偶尔,在键入字符 c 时,按键可能会被长按,而字符可能被输入 1 次或多次。
你将会检查键盘输入的字符 typed。如果它对应的可能是你的朋友的名字(其中一些字符可能被长按),那么就返回 True。
示例 1:
123输入:name = "alex", typed = "aaleex"输出:true解释:'alex' 中的 'a' 和 'e' 被长按。
示例 2:
123输入:name = "saeed", type...
题目简介:给定一个单链表 L:L0→L1→…→L n-1→Ln ,将其重新排列后变为: L0→L n→L1→L n-1→L2→L n-2→…
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
1给定链表 1->2->3->4, 重新排列为 1->4->2->3.
示例 2:
1给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.
思路:分成三步:
找到链表中点的前驱结点(快慢指针法)
将前后两部分链表断开,再将后一半链表逆转
将后一半逆转的链表并入前...
题目简介:给定 S 和 T 两个字符串,当它们分别被输入到空白的文本编辑器后,判断二者是否相等,并返回结果。 # 代表退格字符。
注意:如果对空文本输入退格字符,文本继续为空。
示例 1:
123输入:S = "ab#c", T = "ad#c"输出:true解释:S 和 T 都会变成 “ac”。
示例 2:
123输入:S = "ab##", T = "c#d#"输出:true解释:S 和 T 都会变成 “”。
示例 3:
123输入:S = "a##c", T = "#a#c...
题目简介:给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
123给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
思路:首先定义一个快指针,让其先走n歩。然后快慢指针一起走,当quick == NULL时,慢指针所指向的结点便是要删除的结点。
在慢指针走的过程中,保存其前驱结点,用于删除结点。
tip:
注意删除的是第一个结点时的情况特判。
代码如下:1234567891...
题目简介:给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
12输入:[-4,-1,0,3,10]输出:[0,1,9,16,100]
示例 2:
12输入:[-7,-3,2,3,11]输出:[4,9,9,49,121]
提示:
1 <= A.length <= 10000
-10000 <= A[i] <= 10000
A 已按非递减顺序排序。
思路:双指针,每次将绝对值大的那一个数字的平方放至答案数组的最后面即可(即逆序放置)。
时间复杂度O(n)。
代码如下:1234567891011121314...
题目简介:给定一个完美二叉树,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:
123456struct Node { int val; Node *left; Node *right; Node *next;}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
示例:
思路:直观点的方法就是层序遍历,每次记录这层的总结点数,依次遍历即可。
tip:
本题还有空间复杂度为o(1)的做法,先mark一下。
...
题目简介:给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。
你可以按任意顺序返回答案。
示例 1:
12输入:["bella","label","roller"]输出:["e","l","l"]
示例 2:
12输入:["cool","lock","cook&quo...
题目简介:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
12输入:head = [1,2,3,4]输出:[2,1,4,3]
示例 2:
12输入:head = []输出:[]
示例 3:
12输入:head = [1]输出:[1]
提示:
链表中节点的数目在范围 [0, 100] 内
0 <= Node.val <= 100
思路:使用递归,递归的终止条件为没有结点或只有一个结点。
在两两交换结点时,用 head 表示原始链表的头节点,用 newhead 表示新的链表的头节点。
...