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

数据结构:合并两个有序链表约瑟夫问题详解(C语言实现 + 图解思路)

1,合并两个有序链表

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ typedef struct ListNode ListNode; struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { // 先判空 if (list1 == NULL) { return list2; } if (list2 == NULL) { return list1; } // 申请新链表 ListNode* l1 = list1; ListNode* l2 = list2; ListNode *newhead, *newtail; newhead = newtail = (ListNode*)malloc(sizeof(ListNode)); // 遍历旧链表 while (l1 && l2) { if (l1->val > l2->val) { newtail->next = l2; newtail = l2; l2 = l2->next; } else { newtail->next = l1; newtail = l1; l1 = l1->next; } } // 跳出是是l1,l2有一个是走到NULL了 if (l1) { newtail->next = l1; } if (l2) { newtail->next = l2; } ListNode* ret = newhead->next; free(newhead); newhead = NULL; return ret; }

注意

这是申请带头节点

可以减少重复代码

否则要检查newtail为NULL的时候

还有出了while之后

就直接在newtail-->next = 还没走完的就行

因为本身就是成型的链表

2,自杀游戏--循环链表--约瑟夫问题

//自杀游戏 struct ListNode { int val; struct ListNode* next; }; typedef struct ListNode ListNode; //BuyNode一下创建节点 ListNode* BuyNode(int x) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); if (node == NULL) { exit(1); } node->val = x; node->next = NULL; return node; } //成环函数 ListNode* CreatCircle(int n) { ListNode* phead = BuyNode(1); ListNode* ptail = phead; for (int i = 2; i <= n; i++) { ptail->next = BuyNode(i); ptail = ptail->next; } //接着首尾相连 ptail->next = phead; return ptail; } int ysf(int n, int m) { ListNode* prev = CreatCircle(n); ListNode* pcur = prev->next; //从pcur开始数的 int count = 1; while (pcur->next = pcur) //while (prev->next = prev)这个行不行 { if (count == m) { //销毁pcur节点 prev->next = pcur->next; free(pcur); pcur = prev->next; count = 1; } else { //此时不需要销毁节点 prev = pcur; pcur = pcur->next; count++; } int a = pcur->val; free(pcur); pcur = NULL; return a; } }

注意的是

pcur和prev作用

在销毁pcur的时候,需要前一个节点链接pcur->next;

所以就有了prev

因为成环使用BuyNode 所以有函数BuyNode

http://www.jsqmd.com/news/472803/

相关文章:

  • 开源OpenClaw部署指南
  • openClaw实用Skill
  • master 节点 Java 环境安装操作总结
  • 【企业形象】优秀公司介绍PPT,远不止幻灯片!
  • 关于DeepSeek的详细介绍
  • OpenClaw数据安全深度分析:守护AI执行全流程,优选OPE本地部署
  • Flutter 三方库 dnsolve 的鸿蒙化适配指南 - 让网络寻址回归“高确定性”,打造鸿蒙应用专家级的 DNS 解析与全局网络调度底座
  • java深度学习【AI Infra】Pytorch ON Java 简介 学真算法 用真框架 做认真的人 掌握真本领
  • 【求助】穷学生想进linux do论坛
  • 奥尔特云智慧安保解决方案,安全运营“稳定器”
  • 714. 买卖股票的最佳时机含手续费
  • 现象级爆火:一只 “龙虾” 引发的全民狂欢
  • 2026年三防布行业TOP10厂商盘点:谁将引领市场新趋势?
  • Oracle 拒绝放权 MySQL,社区版发展何去何从?
  • pytorch使用笔记、hugging face等
  • 代码随想录算法训练营第三十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III。
  • Flutter 三方库 df_collection 的鸿蒙化适配指南 - 强大的集合操作增强工具,优化鸿蒙应用数据处理流
  • 种植保险场景解决方案:遥感技术护航农险高质量发展
  • 第 6 篇 RK 平台开发核心:设备树(DTS)详解,小白也能看懂的保姆级教程
  • anime4kCPP在windows上部署记录
  • 进程线程+装饰器+HSV颜色筛选
  • ubuntu安装nvm
  • WPS VBA 窗体被 Page 控件盖住,如何查看 / 修改 Form 大小?
  • 国企央企人力资源管理系统选型盘点:8个信创合规维度对比与落地建议
  • 台阶仪常见问题解答:原理、精度与薄膜厚度测量方法
  • 高并发系统中的缓存设计策略
  • AI发展会让我们失业吗?从岗位替代到任务重排的实用拆解
  • 通达信〖主升抓牛〗主图指标+副图+选股公式:捕捉主升浪的黄金法则
  • OBS Studio 32.1.0 发布,更新亮点多
  • 2026国内最新清爽控油蓬松洗发水品牌推荐 - 十大品牌榜