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

链表合并不解之处

我在做一元多次的方程合并时,在节点函数中定义系数和指数,相当于给你两个La,Lb链表,按照节点中的指数大小排序,对他们系数进行合并。我有两种方式进行编写。

题目:

第一行包含一个整数 nn,表示第一个多项式 LaLa​ 的项数;

接下来 nn 行,每行表示多项式的一项,包含两个整数,分别表示系数和指数;

接下来一行包含一个整数 mm,表示第二个多项式 LbLb​ 的项数;

接下来 mm 行,每行表示多项式的一项,包含两个整数,分别表示系数和指数。

数据保证两个多项式都是按指数从小到大的顺序输入。

  • 1≤n,m≤10001≤n,m≤1000
  • −1000≤系数≤1000−1000≤系数≤1000
  • 1≤指数≤20001≤指数≤2000

输出格式

按指数从小到大的顺序,输出 LaLa​ 与 LbLb​ 相加后得到的多项式,每项占一行,每行输出两个整数,分别表示系数和指数,中间用空格隔开。

你只需要输出系数不为 00 的项。

第一种:

#include <iostream> #include <cstdlib> using namespace std; typedef struct N { int x, y; struct N *next; } Node, *list; list Creatlist(int n) { list L = (list)malloc(sizeof(Node)); L->next = NULL; list tail = L; for (int i = 0; i < n; i++) { list p = (list)malloc(sizeof(Node)); cin >> p->x >> p->y; p->next = NULL; tail->next = p; tail = p; } return L; } list mixab(list La, list Lb) { list pa = La->next; list pb = Lb->next; list Lc = (list)malloc(sizeof(Node)); Lc->next = NULL; list pc = Lc; while (pa && pb) { if (pa->y == pb->y) { int sum = pa->x + pb->x; if (sum != 0) { list newNode = (list)malloc(sizeof(Node)); newNode->x = sum; newNode->y = pa->y; newNode->next = NULL; pc->next = newNode; pc = newNode; } pa = pa->next; pb = pb->next; } else if (pa->y < pb->y) { list newNode = (list)malloc(sizeof(Node)); newNode->x = pa->x; newNode->y = pa->y; newNode->next = NULL; pc->next = newNode; pc = newNode; pa = pa->next; } else { list newNode = (list)malloc(sizeof(Node)); newNode->x = pb->x; newNode->y = pb->y; newNode->next = NULL; pc->next = newNode; pc = newNode; pb = pb->next; } } while (pa) { list newNode = (list)malloc(sizeof(Node)); newNode->x = pa->x; newNode->y = pa->y; newNode->next = NULL; pc->next = newNode; pc = newNode; pa = pa->next; } while (pb) { list newNode = (list)malloc(sizeof(Node)); newNode->x = pb->x; newNode->y = pb->y; newNode->next = NULL; pc->next = newNode; pc = newNode; pb = pb->next; } return Lc; } void printlist(list Lc) { list p = Lc->next; while (p) { cout << p->x << " " << p->y << endl; p = p->next; } } int main() { int n, m; cin >> n; list La = Creatlist(n); cin >> m; list Lb = Creatlist(m); list Lc = mixab(La, Lb); printlist(Lc); return 0; }

我在合并La,Lb得到Lc过程中,在每次将La和Lb中的系数值和指数值附给Lc时通过建立新的有空间的节点,相当于从头建立Lc这个链表,用新的节点直接代替a,b的节点,

第二种:

#include<iostream> #include<cstdlib> using namespace std; typedef struct N { int x, y; struct N*next; } Node,*list; int n, m; list Creatlist(int n) { list L = (list)malloc(sizeof(Node)); L->next = NULL; list tail = L; for (int i = 1; i <= n; i++) { list p = (list)malloc(sizeof(Node)); cin >> p->x >> p->y; tail->next = p; p->next = NULL; tail = p; } return L; } list mixab(list &La, list &Lb) { list pa = La->next; list pb = Lb->next; list pc; list Lc=(list)malloc(sizeof(Node));; Lc->next = NULL; pc = Lc; while (pa && pb) { if (pa->y == pb->y) { if (pa->x + pb->x != 0) { list temp = pb; pa->x += pb->x; pb = pb->next; free(temp); pc->next = pa; pc = pa; pa = pa->next; } else { list t1 = pa; list t2 = pb; pa = pa->next; pb = pb->next; free(t1); free(t2); } } else if (pa->y < pb->y) { pc->next = pa; pc = pa; pa = pa->next; } else { pc->next = pb; pc = pb; pb = pb->next; } } while (pa) { pc->next = pa; pc = pa; pa = pa->next; } while (pb) { pc->next = pb; pc = pb; pb = pb->next; } free(La); free(Lb); return Lc; } void printlist(list &Lc){ list pc=Lc->next; while(pc){ cout<<pc->x<<" "<<pc->y<<endl; pc=pc->next; } } int main(){ cin>>n; list La=Creatlist(n); cin>>m; list Lb=Creatlist(m); list Lc=mixab(La,Lb); printlist(Lc); return 0; }

这个是有错误的,这个方法我想通过直接将Lc的头节点直接指向pa快速得到一个链表,再通过La和Lb的比较进行对Lc进行修改,但是这个超时了。我询问过AI,AI说我的代码存在链表节点指向空指针的情况,出现了死循环,但是我不太明白它的意思。我想知道我的代码具体错在什么地方;怎么进行解决;为什么会出现这种情况,还有其问题原理所在;我在之后的运用中怎么避免这种情况。谢过各位大佬的解答。

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

相关文章:

  • 百川2-13B-4bits模型调优指南:提升OpenClaw任务执行准确率
  • 文艺复兴,什么是XSS,常见形式(二)
  • FreeRTOS任务跑飞了?结合STM32 HardFault信息,深度排查任务栈溢出与内存踩踏
  • 测试用例设计-XMind
  • 探索粗糙表面波动模型生成:打造不规则之美
  • 大模型进阶必看:Agent Skills如何让AI开发更标准化、可复用?速收藏!
  • imx6ull开发板连接移远EC20模块的GPS避坑指南(含SIM卡/USB口选择)
  • COMSOL数值模拟:N2和CO2混合气体在THM热流固三场耦合下增强瓦斯抽采
  • OpenClaw任务编排:用Qwen3.5-4B-Claude实现爬虫+分析闭环
  • 无代码爬虫方案:OpenClaw调度Qwen3.5-9B解析动态网页数据
  • SEO_2024年最新SEO策略与趋势深度解析(352 )
  • 大数据产品实战:用户画像系统的设计与实现
  • 如何实现精准歌词同步?KRC格式全解析与应用实践
  • 46页精品PPT | AI智能中台企业架构设计_重新定义制造
  • QRazyBox:5分钟解决二维码修复难题的专业工具
  • 2026年评价高的开窗透明食品纸盒推荐厂家 - 品牌宣传支持者
  • OpenClaw调参指南:nanobot镜像模型参数优化实战
  • 从编译失败到热重载失效:Mojo与Python混合开发的9类报错分类矩阵表(含错误码速查+对应RFC草案引用)
  • 嵌入式GUI技术选型与实现方案对比
  • 高性能魔兽地图格式转换引擎架构解析:跨版本兼容与数据完整性保障
  • Dify 对接火山方舟全流程避坑指南(插件下载失败问题处理)
  • OpenClaw学术助手:nanobot镜像自动整理参考文献
  • .NET 10 Native AOT 在 Linux 嵌入式设备上的实战
  • 探索AI原生应用领域向量数据库的无限潜力
  • AAAAA2
  • MAA明日方舟助手:让游戏自动化更智能、更高效的开源解决方案
  • 终极指南:用Deep3D实现实时2D转3D视频转换的完整教程
  • 突破语言边界:XUnity.AutoTranslator全场景应用指南
  • 张雪峰走了:一个教育顶流的倒下,撕开了一代人的焦虑真相
  • ollama-QwQ-32B模型监控方案:保障OpenClaw稳定运行的5个指标