class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
class Main {
// public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
// ListNode startNode=new ListNode(0);//最后将会输出的链表
// ListNode Nowl1=l1,Nowl2=l2,NowNode=startNode;//代表三个链表分别的目前结点
// int carry=0; //进位
// while(Nowl1!=null || Nowl2!=null){ //两个相加链表的当前结点只要有一个不为空就要做加法运算
// int x=(Nowl1!=null)?Nowl1.val:0; //第一个链表的当前节点不为空就取值,否则取0
// int y=(Nowl2!=null)?Nowl2.val:0;
// int sum=x+y+carry; //计算当前位相加的和
// carry=sum/10;
// NowNode.next=new ListNode(sum%10); //设置输出链表的下一个结点值(这个链表第一个节点值为0,第二个结点值才是输出链表的第一个节点值,在后面返回的时候从第二个节点开始返回就好了)
//
// NowNode=NowNode.next; //下面三行是三个链表的当前结点分别往后移
// Nowl1=(Nowl1!=null)?Nowl1.next:null; //当前结点不为空则结点后移,否则当前结点仍然设为空
// Nowl2=(Nowl2!=null)?Nowl2.next:null;
// }
// if(carry>0){
// NowNode.next=new ListNode(carry); //最后一位若还有进位,则输出链表再加一位长度
// }
// return startNode.next; //从输出链表的第二个节点开始输出
// }
public ListNode getSum(ListNode l1 ,ListNode l2){
ListNode startNode = new ListNode(0);
ListNode nowN1 = l1,nowN2 = l2,nowNode = startNode;
int carry = 0;
int sum = 0;
while (nowN1 != null || nowN2 != null){
int x = nowN1 != null ? nowN1.val : 0;
int y = nowN2 != null ? nowN2.val : 0;
sum = x + y +carry;
carry = sum / 10;
nowNode.next = new ListNode(sum % 10);
nowNode = nowNode.next;
nowN1 = nowN1 != null ? nowN1.next : null;
nowN2 = nowN2 != null ? nowN2.next : null;
}
if (carry > 0){
nowNode.next = new ListNode(carry);
}
return startNode.next;
}
}
两个链表实现相加
最新推荐文章于 2024-08-12 11:10:27 发布