
练习题
文章平均质量分 58
2023框框
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
掌握链表——(八)LeetCode160.相交链表
相交链表 题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 题目来源 思路一:暴力求解 --穷举 依次取A链表中的每个结点更B链表中的所有结点比较,如果有地址相同的结点,就是相交,第一个相同的就交点。 时间复杂为 O(N^2)。因为时间复杂度太高了,不用这个思路。 思路二:要求优化到O(N) 1) 我们先解决第一个问题,判断链表是否相交,如果没有返回NULL。原创 2021-10-25 16:10:11 · 258 阅读 · 0 评论 -
掌握链表——(七)牛客OM36 ——链表的回文结构
题目描述: 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 题目来源 具备知识: 1.反转链表 2.找出链表中间结点位置 在顺序表中回文的判断就是最右边指针指向的数与最左边指针指向的数进行比较,然后分别递增或递减,接着比较,如果左指针与右指针相遇,或者左指针大于右指针,那么就结束比较,如果中途不想等则不是回文数组; 顺序表和链表有个区别就是,顺序表结构可以.原创 2021-10-25 13:30:49 · 303 阅读 · 0 评论 -
拿捏链表(六)—— 牛客网CM11 链表分割
拿捏链表(六)—— 链表分割 现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。(题目来源) struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Partition { public: ListNode* partition(ListNode原创 2021-10-24 21:10:09 · 348 阅读 · 0 评论 -
掌握链表(五)——剑指25.合并两个排序链表
合并两个有序链表 题目来源 思路一、 我们只需定义两个指针 一个指向头结点 head 一个指向尾结点 tail 尾结点方便尾插,如果没尾结点,那么我们每次尾插时,都需要遍历一遍链表找到尾结点,才可以往后面插入 1.先确定第一个结点,l1的第一个结点与l2的第一个结点进行比较,那个小那个就是head链表的第一个结点 2.头结点确定后,继续两个链表比较,然后尾插,直到其中一个链表头指向空 3.把还没置空的链表链接到head链接后即可 struct ListNode* mergeTwoLists(stru原创 2021-10-23 19:11:01 · 420 阅读 · 1 评论 -
掌握链表(四)—— 剑指22.链表中倒数第k个结点
链表中倒数第k个结点 题目描述 题目来源 思路一、 遍历一遍数组求出长度 count 然后再重第一结点往后走count-k个结点就可以找到倒数第k个的结点 struct ListNode* getKthFromEnd(struct ListNode* head, int k){ struct ListNode* tmp=head; int count=0; while(tmp) { count++; tmp=tmp->next; }原创 2021-10-23 18:05:48 · 148 阅读 · 1 评论 -
掌握链表——LeetCode876.链表的中间结点
文章目录思路二: 链表的中间结点 给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间结点。 题目来源 思路一: 计算链表长度 长度除于2为寻找中间结点的循环变量 通过画图和计算,我们很容易就能超出规律 并按此思路写出如下代码 struct ListNode* middleNode(struct ListNode* head){ struct ListNode* tmp=head; int count =0; while(tm原创 2021-10-23 15:19:29 · 142 阅读 · 0 评论 -
掌握链表(二)——LeetCode206.反转链表
反转链表 题目描述 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 题目来源 思路一、 把链表的的每个链接的方向取反 要使两个结点之间的指针指向反转,看似用两个变量足矣,直接让后一个结点指向前一个结点。但是仔细思考后发现并没有那么简单,我们如果直接让后一个结点指向前一个结点,那么后一个结点所指向的再后面一个结点的位置就无从知晓了。所以,我们还得定义3个指针变量:n1,n2,n3 。 1)初始条件 n1=NULL n2=head n3=head->next 2)翻转核心逻辑 1.原创 2021-10-23 14:29:12 · 161 阅读 · 0 评论 -
掌握链表(一)——移除链表元素
文章目录leetcode203. 移除链表元素题目描述 leetcode203. 移除链表元素 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。 本题来源与LeetCode 我们只需定义两个指针,一个指针用来指向删除结点的前一个结点,和要删除的结点 分别为pre、cur 情况一:删除的结点为第一个结点,这时候我们按照头删的方法即可 先让头结点指向删除结点的后一个结点 然后把删除结点置空 情况二:删除的结点不原创 2021-10-23 12:04:34 · 147 阅读 · 0 评论 -
在字符串中统计子字符串数量
在庆祝祖国母亲70华诞之际,老师给小乐乐出了一个问题。大家都知道China的英文缩写是CHN,那么给你一个字符串s,你需要做的是统计s中子串“CHN”的个数。 子串的定义:存在任意下标a < b < c,那么“s[a]s[b]s[c]”就构成s的一个子串。如“ABC”的子串有“A”、“B”、“C”、“AB”、“AC”、“BC”、“ABC”。 输入描述: 输入只包含大写字母的字符串s。(1 ≤ length ≤ 8000) 输出描述: 输出一个整数,为字符串s中字串“CHN”的数量。 示例1 输入原创 2021-08-18 19:31:53 · 2823 阅读 · 0 评论