问题描述:
有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。
给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。
测试样例:
{1,2,3},{3,2,1}
返回:{4,4,4}
分析:
1.判断给的a,b链表是否为空,如果a为空,返回b;如果b为空,返回a。
2.定义一个新的节点list指向null,在定义一个头结点head指向这个新节点。
3.遍历a 和b ,将a的val值与b的val值相加放到一个新的节点中,添加一个新节点,head就向后移动一个,list.next就是创建好的新链表的头结点。
public class Main {
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public ListNode plusAB(ListNode a, ListNode b) {
// write code here
ListNode list = new ListNode(-1);
ListNode head = list;
ListNode p = a;
ListNode q = b;
int sum = 0;
if(a == null){
return b;
}
if(b==null){
return a;
}
while(p != null || q != null || sum !=0){
if(p!=null){
sum += p.val;
p = p.next;
}
if(q!=null){
sum += q.val;
q = q.next;
}
head.next = new ListNode(sum%10);
sum /= 10;
head = head.next;
}
return list.next;
}
}