/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null,tail = null;
int carry = 0;
while(l1 != null || l2 !=null){
int val1 = l1!=null ? l1.val : 0;
int val2 = l2!=null ? l2.val : 0;
int sum = val1 + val2 + carry;
if(head==null){
// 第一次存入数据节点时: 头尾节点 应该都指向该节点
head = tail = new ListNode(sum%10);
}else{// 非第一次存入数据节点
tail.next = new ListNode(sum%10);
tail = tail.next;
// 这就是 链表的 add功能,默认 add添加到屁股位置
}
carry = sum/10; // 获取此时 l1 和 l2 节点val值之和的十位数
if(l1 != null){
l1 =l1.next;
}
if(l2 != null){
l2 = l2.next;
}
}
if(carry>0){
tail.next = new ListNode(carry);
// 这里就不用担心它是两位数,因为每个节点val都是一位,相加的结果不可能是 3位数。
// 最多2 位数,再加上前面我们对其进行 “/10” ,所以 carry 铁定是一位数
tail = tail.next; // 最后别忘记了,尾巴节点,永远指向链表的尾节点
}
return head;
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/DarkAndGrey/article/details/122003694
内容来源于网络,如有侵权,请联系作者删除!