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

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;
}
...全文
209 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,所以要倒过来。

62,615

社区成员

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

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