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

北京建网站公司黄山门票多少钱一张

北京建网站公司,黄山门票多少钱一张,南宁网站托管,疯狂影视目录 题目要求 手搓简易单链表 代码实现 题目要求 现有一链表的头指针 ListNode* head ,给一定值 x ,编写一段代码将所有小于 x 的节点排在其余节点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头节点 举例说明&a…

目录

题目要求

手搓简易单链表

代码实现 


题目要求

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

举例说明:

输入:x = 5 ; [1,3,9,6,5,4,7,2]

输出:[1,3,4,2,9,6,5,7]


手搓简易单链表

代码演示:

struct ListNode* n1 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n1);
struct ListNode* n2 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n2);
struct ListNode* n3 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n3);
struct ListNode* n4 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n4);
struct ListNode* n5 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n5);
struct ListNode* n6 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n6);
struct ListNode* n7 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n7);
struct ListNode* n8 = (struct ListNode*)malloc(sizeof(struct ListNode));
assert(n8);n1->val = 1;
n2->val = 3;
n3->val = 9;
n4->val = 6;
n5->val = 5;
n6->val = 4;
n7->val = 7;
n8->val = 2;n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = n6;
n6->next = n7;
n7->next = n8;
n8->next = NULL;

代码实现

代码演示:

struct ListNode* partition(struct ListNode* head, int x)
{// 小于 x 的头尾节点struct ListNode* lesshead;struct ListNode* lesstail;// 大于等于 x 的头尾节点struct ListNode* greaterhead;struct ListNode* greatertail;// 定义哨兵位lesshead = lesstail = (struct ListNode*)malloc(sizeof(struct ListNode));greaterhead = greatertail = (struct ListNode*)malloc(sizeof(struct ListNode));struct ListNode* cur = head;while (cur != NULL){if (cur->val < x){lesstail->next = cur;lesstail = lesstail->next;}else{greatertail->next = cur;greatertail = greatertail->next;}cur = cur->next;}// 链接两个链表lesstail->next = greaterhead->next;greatertail->next = NULL;head = lesshead->next;free(lesshead);free(greaterhead);return head;
}

代码解析:

代码思路:创建两个带哨兵位的单链表,一个用来链接小于 x 的节点,一个用来链接大于等于 x 的节点,最后再把两个链表进行链接,这样就完成了链表的分割,并且没有改变原来的数据顺序

代码逻辑:lesshead 和 lesstail 用来管控小于 x 的节点,lesshead 是哨兵位,不存储有效数据,lesstail 向后链接小于 x 的节点,greaterhead 和 greatertail 作用同上,是用来链接大于等于 x 的节点,进行分割后,不要忘记将 greatertail 的 next 置空,因为分割后 greatertail 节点不一定是为节点,最后再将 lesshead 哨兵位的 next 赋值给 head ,再释放,即可

代码验证:

算法的时间和空间复杂度:

while 循环执行了 N 次,每次内部常数次,只 malloc 开辟了两个节点,可忽略不计

算法的时间复杂度:O(N)

算法的空间复杂度:O(1)

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

相关文章:

  • 用tomcat做网站crm管理系统怎么用
  • 合同网站开发 设计 后期维护郑州同济医院
  • 海南海口网站开发公司手机网站定制开发费用
  • 宁波网站推广方法北京网站推广公司排名
  • ftp 网站管理长沙建站优化
  • 技术支持 东莞网站建设鞋子centos wordpress安装教程
  • 瑞安网站开发上海网站seo牛巨微
  • 如何自建网站卖产品福田市网站建设推广
  • 湛江网站建设策划制作灯笼的视频
  • 西部数码做的网站打不开网站建设与管理课件
  • 宁波市城乡和建设网站公司网站如何更改内容
  • 网站备案域名更改吗网页入口网站推广
  • 做营销网站 如何让商家入驻怎么开网店不需要自己上货
  • 可以帮忙做网站做公司vps搭建网站是什么意思
  • 中国做外贸网站有哪些问题建站之星安装说明
  • 单位申请免费网站wordpress 站长统计插件
  • 如何制作手机网站app001推广平台
  • 广州快速建站公司推荐自媒体图片素材网站
  • 北海做网站网站建设网站的需求分析怎么写
  • 东莞网站建设时间建站宝盒成品网站演示
  • 做网站代理商好赚吗给厂家做代理上什么网站
  • wap手机网站开发asp经验wordpress 漏洞攻击
  • 织梦网站内容怎么做付费可见如何seo网站推广
  • 河北省建设厅网站官网搜索引擎优化推广
  • 哪个域名网站好企业网站源码去一品资源网
  • 大连住房和建设局网站湖北省建设厅官方网站电话
  • 海口制作网站软件网站虚拟主持人制作
  • 2345软件为什么没人管优化关键词的方法
  • 百度云架设网站网站首页布局设计代码
  • 网站备案ip地址段南阳建设网站哪家好