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

中国空间站成为全人类太空之家快速建站哪个平台好

中国空间站成为全人类太空之家,快速建站哪个平台好,学做网页的网站,wordpress 更新 ftp目录 题目要求 手搓简易单链表 代码实现 题目要求 现有一链表的头指针 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.shuangfujiaoyu.com/news/61872.html

相关文章:

  • 南昌做网站后台投票长沙官网网站推广优化
  • 外贸网站建站mseo培训机构哪家好
  • 用vs2015做网站教程百度推广开户渠道公司
  • 网站建设运营预算明细链接提交
  • 呼和浩特百度公司seo属于什么
  • 福建省建设工程监理协会网站百度高级搜索页面的网址
  • 90设计赚钱seo技术快速网站排名
  • 可视化建站网站源码旅游景点推广软文
  • 开个网站卖机器怎么做关键词点击价格查询
  • wordpress备份还原安徽seo人员
  • 政府网站建设长沙谷歌seo外包公司哪家好
  • 自建网站餐饮服务提供者在几个工作日怎么样在百度上推广自己的产品
  • 温州专业微网站制作多少钱海外短视频跨境电商平台是真的吗
  • 简答题网站建设步骤网站注册地址查询
  • 网站建设丿金手指排名9南京seo培训
  • 中国风手机网站模板虎门今日头条新闻
  • 六安属于哪里武汉seo楚天
  • 兰州市做网站的企业有哪些公关策划公司
  • 做cpa的网站源码网络营销的基本方法
  • 公司网站建设佛山哪家好怎么做电商
  • 塘厦网站建设公司百度小程序入口官网
  • 重庆网站制作外包关键词优化的策略有哪些
  • 常州手机网站建设企业网站建设流程
  • 镇级政府可以做网站吗青岛网站优化公司哪家好
  • ui设计哪里培训机构关键词seo排名优化
  • 南阳网站建设制作今日预测足球比分预测
  • 校园网站怎么做HTML广西百度seo
  • 安阳做网站引流推广网站平台
  • 做黄金的经常看什么网站相亲网站排名前十名
  • 宁波网站关键词优化公司百度一下点击搜索