两个单链表生成相加链表问题

johnyin2015 2019-03-07 05:32:01
问题见代码,这是一段大神写的代码。但有两行我没看懂,有知道的童鞋帮忙解答下,先谢谢了!
public  Node addList2(Node head1,Node head2)  
{
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
while(head1 != null){
stack1.push(head1.data);
head1 = head1.next;
}
while(head2 != null){
stack2.push(head2.data);
head2 = head2.next;
}
int n1=0; //链表1的数值
int n2=0; //链表2的数值
int n=0; //n1+n2+ca
int ca=0; //进位

Node node=null; //当前节点
Node pnode=null; //当前节点的前驱节点
while(!stack1.isEmpty()||!stack2.isEmpty())
{
n1 = stack1.isEmpty() ? 0 : stack1.pop();
n2 = stack2.isEmpty() ? 0 : stack2.pop();
n=n1+n2+ca;
node=new Node(n%10);
node.next=pnode;//根据下一行代码,node节点next域指向它自身,为什么要指向自身
pnode=node;//
ca=n/10;
}

if(ca == 1)
{
pnode = node;
node=new Node(n/10);
node.next=pnode;//问题同上
}

return node;
}
...全文
229 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2019-03-08
  • 打赏
  • 举报
回复
比如 node1[3,8] 入栈变成 s1[8,3],node2[5,6] 入栈变成 s2[6,5],可见栈pop,可以实现node从后面的元素开始相加(简单说就是从个位开始),否则从node的前面的元素开始相加,没法做进位处理
其次,为啥node要next指向pnode,然后pnode再等于node呢?这实际上就是node倒排,如果一直是node的next为新的node,就相当于个位排在前,十位百位等等一直排在后,显然不符合,所以要倒过来排,让下一个新node的next等于前一个旧node
ca是进位,最后一次进位肯定是在最前,所以不用倒排了
qq_39936465 2019-03-07
  • 打赏
  • 举报
回复
Stack是栈,放入数据的话,第一个在最下面,最上面的是最后一个数据,所以取出时是最后一个数据先出来,下一个是前一个数据。如果有十个数据放入栈的时候是10,9,8,7,6,5,4,3,2,1,;取得时候10先出,然后是9,。。。。最后是1,所以要倒过来。
打开下面链接,直接免费下载资源: https://renmaiwang.cn/s/5h9c4 在C语言中采用链表结构实现多项式相加算法是一项具有挑战性的任务。多项式作为数学中的基础概念,在计算机领域有着广泛的应用价值。为了高效执行多项式运算,需要设计合理的数据存储方式和运算规则。通过使用动态内存分配技术,可以在程序运行过程中灵活调整资源占用空间,从而提升系统性能。本文将详细阐述基于C语言链表实现的多项式相加算法,并提供完整的代码实现方案。 首先,在编程实现中需要定义多项式的数据结构。为此,我们引入一个自定义类型`Polynode`来表示多项式中的每一项。每个节点包含两个关键属性:系数(coef)和指数(expon)。通过指针变量可以指向多项式链表的头部元素,从而方便后续的操作处理。 其次,在程序开发过程中需要实现一系列辅助函数以完成基本操作。其中包括一个用于读取用户输入并构建多项式的函数`ReadPoly`。该函数采用动态内存分配技术来确保多项式数据的存储空间能够满足实际需求,并通过循环结构接受多项式的各项系数和指数信息,将其依次存入链表中。 此外,为了便于观察和验证算法运行结果,还需要编写一个用于输出多项式内容的函数`PrintPoly`。该函数将按照一定的格式规则,逐项打印出多项式的系数、指数及其连接关系,从而形成完整的多项式表达式字符串。 在实现核心运算功能方面,我们需要开发一个能够处理两个多项式相加操作的核心算法模块`Add`。该算法通过遍历两个多项式的链表结构,比较对应项的指数值,并对相同指数的项进行系数求和的操作。最终将得到一个新的多项式结果,其各项由原始多项式的相应项合并后生成。 最后,在主程序设计中需要调用以上实现模块来完成整个系统的功能流程。具体来说,首先通过`ReadPoly`函数读取两个相加的多项式数据,并将其存储在各自的链表结构中;接着调用`A

62,626

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧