文章目录第2章暴力求解2.1枚举2.2模拟1.图形排版2.日期问题3.其他模拟第3章排序与查找3.1排序3.2查找第4章字符串4.1字符串4.2字符串处理4.3字符串匹配第5章数据结构一5.1向量5.2队列5.3栈第6章数学问题6.1进制转换6.2最大公约数与最小公倍数6.3质数6.4分解质因数6.5快速幂6.6矩阵与矩阵快速幂6.7高精度整数第7章贪心策略7.1简单贪心7.2区间贪心第8章递归与分治8.1递归策略8.2分治法第9章搜索9.1广度优先搜索9.2深度优先搜索第10章数据结构二10.1二叉树10.2二叉排序树10.3优先队列10.4散列表第11章图论11.1概述11.2并查集11.
前言: 本文收录于http://t.csdn.cn/n6UEP数据结构刷题的博客中,首先欢迎大家的来访,其次如有错误,非常欢迎大家的指正!我会及时更正错误!目录一.链表的中间结点 1.1原理:快慢指针的使用链表元素个数为奇数时链表元素个数为偶数时1.2循环条件问题?一.链表的中间结点 来源:876.链表的中间结点-力扣(LeetCode)题目:1.1原理:快慢指针的使用这个算法之所以有效,是因为fast指针的移动速度是slow指针的两倍。快慢指针的精妙之处在于,当快指针移动到链表尾部时,慢指针就刚好移动了链表长度的一半,从而找到中间节点。因此当,fast指针到达链表尾部时,slow指针
一、链表分割牛客网链接题目描述:现有一链表的头指针ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。思路:题目中要求不能改变原来的数据顺序,所以不能采用交换的方法写,应该单独创建两个链表,第一个链表尾插小于x的数据,另外一条链表尾插大于x的数据,最后将这两条链表进行链接。尾插不改变原来数据顺序,头插将原来的数据顺序逆置。我们引用哨兵卫头结点解决这道题会更加方便。不仅方便尾插,不需要分类判断空指针与否,而且也避免两个链表链接时第一个链表为空的情况。TIP:一般尾插时,最后一个结点的next容易出现问
单链表OJ题前言一、返回链表开始入环的第一个节点思路一思路二二、返回链表的深度拷贝总结前言此次练习题有两道!有点小难度,但相信难不住大家的!我也会给出两道OJ题的链接,大家也赶快去试一试吧一、返回链表开始入环的第一个节点题目链接:OJ链接提示:链表中节点的数目范围在范围[0,104]内-105pos的值为-1或者链表中的一个有效索引本题有两个解析思路~思路一代码演示://解题方法一structListNode*detectCycle(structListNode*head){structListNode*move1=head;structListNode*move2=head;while(m
一、移除链表元素leetcode链接题目描述:给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val==val 的节点,并返回 新的头节点 。思路:正常遍历,找到value的值与题目中相同的结点去free掉,分为两种情况:第一种就是头结点就是value值,直接将头节点指向next;第二种情况就是第二个结点开始是value,需要有一个前结点指向value结点的下一个。源码:structListNode*removeElements(structListNode*head,intval){//链表本身为空if(head==NULL)returnNULL;st
大家好,欢迎来到我的博客,此题是关于链表oj的第一题,此后还会陆续更新博客,如有错误,欢迎大家指正。来源:https://leetcode.cn/problems/remove-linked-list-elements/description/题目:方法一:定义prev和cur指针(双指针)分析: 使用两个指针prev和cur来遍历链表。prev指针指向当前节点的前一个节点,而cur指针指向当前节点。在while循环中,首先检查当前节点的值是否等于val。如果相等,则需要移除该节点。如果当前节点的值不等于val,则将prev更新为cur,cur更新为下一个节点,以
🔥博客主页:小王又困了📚系列专栏:数据结构🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️目录一、链表分割💡方法一:二、链表的回文💡方法一: 三、相交链表💡方法一: 四、环形链表 💡方法一: 🗒️前言:在上一期中我们给大家介绍了单链表,也了解了单链表的实现。接下来就让我们进入实践,练习一些经典题目,让我们对单链表的理解更加深入一、链表分割题目:💡方法一:我们创建两条链表,把小于x的节点放在一条链表中,剩余的放在另一条节点,最后将两条链表连接起来。在这里要使用带哨兵位的链表,不用考虑头插和第一条链表为空的问题,可以大大减少代码量。 注意:要将链表最后一个节点的指针域置为空,不然会导致链
前言: 本文章是关于在力扣上面的数组相关面试题的讲解,包括: 1.原地移除数组中所有的元素val,要求时间复杂度为O(N),空间复杂度为O(1), 2.删除排序数组中的重复项。 3.合并两个有序数组。一.原地移除数组中所有的元素val题目:https://leetcode.cn/problems/remove-element/1.1时间复杂度为O(N^2),空间复杂度为O(1)写一段原地移除数组中所有的元素val,要求时间复杂度为O(N^2),空间复杂度为O(1)的代码实现:思路:遇到这个val后面的元素往前面覆盖。intremoveElement(int*nums,intnumsSize,i
🔥博客主页:小王又困了📚系列专栏:数据结构🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️目录一、移除链表元素💡方法一:💡方法二:二、链表的中间节点💡方法一:三、链表中倒数第k个结点💡方法一:四、反转链表💡方法一:💡方法二:五、合并两个有序链表💡方法一: 🗒️前言:在上一期中我们给大家介绍了单链表,也了解了单链表的实现。接下来就让我们进入实践,练习一些经典题目,让我们对单链表的理解更加深入。一、移除链表元素题目:💡方法一:我们使用两个指针遍历数组,遇到与val相同的数据域,就删除这个节点。我们在思考问题时要想全面,当要删除头节点时,常规方法就无法实现,对于删除头节点要做单独处理。🍩
LeetCode链接:203.移除链表元素-力扣(LeetCode)本文导航💭做题思路🎨画图更好理解:✍️代码实现🗂️分情况讨论:❄️极端情况:💭做题思路遍历链表,找到值为val的节点删除这里需要两个指针 cur用来遍历链表 prev指向cur的前一个位置,方便删除一个节点后,链接前后节点如果遇到要删除的节点,就让prev->next=cur->next 注:不要忘了free删除掉的节点🎨画图更好理解:✍️代码实现🗂️分情况讨论:1.当cur->val==val时,删除该节点 (1)头删要单独处理,因为头删会改变head的指向,本题要求返回新的头节点 (2)剩下的正常处理2.当cu