首页 > 代码库 > 链式A+B
链式A+B
题目描述
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}
import java.util.*;/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Plus { public ListNode plusAB(ListNode a, ListNode b) { // write code here int jin=0; ListNode c=new ListNode(0); ListNode head=c; int val; while(a!=null||b!=null||jin==1){ int aval=a==null?0:a.val; int bval=b==null?0:b.val; val=aval+bval+jin; jin=val/10; val=val%10; c.next=new ListNode(val); c=c.next; a=a==null?null:a.next; b=b==null?null:b.next; } return head.next; }}
自己第一遍通过的代码和如上思路一致,只是没有使用三目运算符,也没把a,b为null和进位为1总结到一起,if else显得代码冗长。此题有如下几个注意点:
1.因为while循环中每次都是c.next=new.........,所以第一个节点就是个特例了,为了方便可以在最开始设置一个作为头结点(最后输出他的next域),将第一个节点也和后面的节点归为一类插入。
2.正常思路是需要判断a是否结束了,b是否结束了,分情况讨论。这里用一个三目运算符,当其中一个为null的时候设置他为0即可。
3.如果最高位的1是次高位进位的,那么正常思路的情况最后一个1是没法取到的,因为最后判断a,b都为null就结束,所以判定条件为 a!=null||b!=null||jin==1
4.最后在a=a.next的时候,因为a可能是null,所以在这个时候用一个三目运算符判断如果为null则他的下一次循环还按照null来,不取a.next了,也就不会有越界问题
5.最开始的c还有一个copy为head,因为c随着链表在向后移动,防止最后输出找不到头结点。最后输出head.next
链式A+B
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。