杭州网站制,公司建设网站需求分析,成都计算机培训机构哪个最好,网站建设推广有没有文章目录 前言一、移除链表元素二、链表的中间节点三.反转链表四.合并两个有序链表五.分割链表六.环形链表的约瑟夫问题总结 创作不易#xff0c;点赞收藏一下呗#xff01;#xff01;#xff01; 前言
在上一节#xff0c;我们介绍了单链表的增#xff0c;删#xff… 文章目录 前言一、移除链表元素二、链表的中间节点三.反转链表四.合并两个有序链表五.分割链表六.环形链表的约瑟夫问题总结 创作不易点赞收藏一下呗 前言
在上一节我们介绍了单链表的增删查改接口的实现思路。今天我们就实战运用这些思想来解决一些算法题 一、移除链表元素
链接放在这里
力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路一遍历原链表遇到满足valval的节点就删除
思路非常简单但是要注意一些细节。 头节点valval的情况需要特殊考虑此时就是头删。还有一种特殊情况就是链表为空时直接返回head即可 思路二创建新链表遍历原链表并将valval的节点赋值给新链表 注意 最后一定要判断新链表的尾节点是否指向NULL如果不是则需要手动置为NULL 思路三哨兵节点的方式来创建带头新链表其余思路和二相同 带头链表的好处是尾插时不需要判断新链表是否为空来分情况考虑 二.链表的中间节点
链接
力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路一先遍历原链表统计节点个数再循环来找到中间节点 思路二快慢指针法 整体思路 定义两个指针来遍历原链表快指针一次走两步慢指针一次走一步当快指针为NULL或快指针的next指针为空时此时慢指针就正好在中间节点上
注意循环条件的顺序两个不能写反否则pfast为空时会报错 三.反转链表
链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路一创建新链表遍历原链表进行头插 这个思路比较简单实现不多赘述 思路二原地翻转三指针法 接下来 循环进行上述操作直至pcur为NULL时停止这样就完成了对链表的反转。
代码实现如下 特别注意一定要单独处理空链表的情况 四.合并两个有序链表
链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路一遍历l1链表在l1链表的基础上将l2链表中的节点插入到特点位置 这个思路实现的代码可能有些多我们这里就不重点介绍 思路二创建新链表 思路三创建带哨兵节点的新链表
整体思路和第一题的思路三相仿感兴趣的友友们可以去看看
我这里就不专门写一份了。 五. 分割链表
链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台 思路创建两个带头链表一个用来存放小于val的节点另一个存放大于等于val的节点最后将这两个节点首尾相连 注意最后一定要将大礼链表的尾节点的next置为NULL否则会成环死循环 六.环形链表的约瑟夫问题
链接环形链表的约瑟夫问题_牛客题霸_牛客网 思路运用循环链表 总结
我们不能只会做这道题而是应该掌握这道题目背后的算法思维