当前位置: 首页 > news >正文

教育网站开发用例图可以做企业网站

教育网站开发用例图,可以做企业网站,做app网站有哪些功能,前端响应式​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录链表OJ题(六)1. 链表…

在这里插入图片描述

​📝个人主页:@Sherry的成长之路
🏠学习社区:Sherry的成长之路(个人社区)
📖专栏链接:数据结构
🎯长路漫漫浩浩,万事皆有期待

文章目录

  • 链表OJ题(六)
    • 1. 链表分割
      • 思路一 带哨兵位的头结点
      • 思路二 不强行加头结点
  • 7.总结:

上一篇链表OJ题链接:【链表OJ题(五)】合并两个有序链表

链表OJ题(六)

1. 链表分割

链接:CM11 链表分割

描述:
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

思路一 带哨兵位的头结点

题目要求我们将小于 x 的节点和大于等于 x 的节点分隔,小于 x 的节点在前,大于等于 x 的节点在后,且不能改变原来的数据顺序

不能改变顺序就比较棘手,如果没有这个条件,我们可以用双指针来写。但是题目既然给出了要求,我们就得想办法解决。

我们创建一个新链表存放小于 x 的值,另一个存放大于等于 x 的值。然后遍历原链表,将符合条件的值放入对应的链表中,最后再将存放小于 x 的值的链表和存放大于等于 x 的值的链表链接起来

那么这过程肯定是尾插,本题使用哨兵位是十分合适的,因为本题有很多的空指针处理的情况,所以我们设定两个哨兵位 lessHeadgreaterHead

再给定两个尾lessTailgreaterTail,用来尾插。 但是最后记得释放哨兵位。

注意如果以 greaterHead 结束的元素不是链表的最后一个元素(即原链表最后一个元素小于 x ),就可能会造成 链表带环 的情况,因为尾插改变前一个链接关系,没有改变自己的后一个链接关系,所以需要断开环,然后将 greaterTailnext 置为空。
在这里插入图片描述

代码:


class Partition {
public:ListNode* partition(ListNode* pHead, int x) {struct ListNode* lessTail, *lessHead, *greaterTail, *greaterHead;// 建立哨兵位lessTail = lessHead = (struct ListNode*)malloc(sizeof(struct ListNode));greaterTail = greaterHead = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = pHead;while (cur){if (cur->val < x){lessTail->next = cur;lessTail = cur;}else{greaterTail->next = cur;greaterTail = cur;}cur = cur->next;}// 链接两个链表lessTail->next = greaterHead->next;greaterTail->next = NULL; // 断开环// 拷贝节点,释放哨兵位struct ListNode* ans = lessHead->next;free(lessHead);free(greaterHead);return ans;}
};

在这里插入图片描述

思路二 不强行加头结点

这道题目不用哨兵位也可以做,但是比较考验细节

/*
struct ListNode {int val;struct ListNode *next;ListNode(int x) : val(x), next(NULL) {}
};*/
class Partition {
public:ListNode* partition(ListNode* pHead, int x) {struct ListNode* lessTail, *lessHead, *greaterHead, *greaterTail;lessTail = lessHead = greaterHead = greaterTail = NULL;struct ListNode* cur = pHead;while (cur){if (cur->val < x){if (lessTail == NULL){// 第一次尾插lessHead = lessTail = cur;}else{lessTail->next = cur;lessTail = lessTail->next;}cur = cur->next;}else{if (greaterTail == NULL){// 第一次尾插greaterHead = greaterTail = cur;}else{greaterTail->next = cur;greaterTail = greaterTail->next;}cur = cur->next;}}// lessHead 为空,说明原链表为空或链表的值全大于 x// 且链表尾部的 next 一定为空// 返回 greaterHeadif (lessHead == NULL)return greaterHead;// 如果 lessHead 和 greaterHead 都不为空// 说明正常分割// 将其链接,greaterHead 尾部链空if (lessHead != NULL && greaterHead != NULL){lessTail->next = greaterHead;greaterTail->next = NULL;}// 无论是正常分割,还是链表的值全小于 x// 都是返回 lessHeadreturn lessHead;}
};

在这里插入图片描述

7.总结:

今天我们通过两种思路分析并完成链表分割这道链表OJ题目,也更加深层次了解和使用了哨兵位的头结点这个思路,通过这道题我们也能总结出,当面对尾插且需要处理很多空指针的时候,用哨兵位的头节点这个思路很方便。希望我的文章和讲解能对大家的学习提供一些帮助。

当然,本文仍有许多不足之处,欢迎各位小伙伴们随时私信交流、批评指正!我们下期见~

在这里插入图片描述

http://www.yayakq.cn/news/66460/

相关文章:

  • 昆明网站建设哪个好网址大全4399
  • wordpress做资源下载站高端企业门户网站建设
  • 网站站长seo推广珠海企业模板建站
  • 深圳市路桥建设集团有限公司招标采购网站数据采集发布 wordpress
  • 郑州网站推广服务dw手机销售网站制作
  • 郑州做网站 码通专业的集团网站开发费用多少钱
  • 海口专业做网站企业网盘系统
  • 成都网站建设哪里有百度收录网站入口
  • 北京市建设教育协会网站查询免费的自助建站
  • 建网站的外包公司佰汇康网站建设
  • 网站 稳定性seo教学视频教程
  • 百度网站建设费用怎么做账注册什么公司给别人做网站
  • 滕州网站制作换物网站为什么做不起来
  • 茂名网站建设价格中文网址价格
  • 如何推广自己网站建设手表商城网站多少钱
  • 昆明网站建设方案报价浏览器下载安装大全免费下载
  • 建设银行官方网站个人网站怎么获得流量
  • 扬州公司做网站公司懂网络维护和网站建设的专业
  • 青岛可以做网站的公司网站如何添加js代码
  • 做我姓什么的网站win2003 wordpress
  • 敏感词过滤wordpress湛江网站优化快速排名
  • 购物网站线下推广办法wordpress做资源分享站
  • 网站验证钱的分录怎么做社交媒体营销
  • 南宁网络推广建站大型门户网站建设推广
  • 小纯洁网站开发安邦消防安全技术服务有限公司
  • 类似千图网的素材网站住房和城乡建设部网站科技项目
  • 实用的网站三大外包公司
  • 广东网络公司网站建设网站备案添加APP备案
  • 成都网站建设哪家好文章寓意好的商贸公司名字
  • 自建网站的流程wordpress 后台实现轮播图