2. 两数相加
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int val=0, ListNode next=null) {
* this.val = val;
* this.next = next;
* }
* }
*/
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null, tail = null;//声明头指针和尾结点
int carry = 0;//声明进位暂存变量
int n1, n2, sum;//声明变量来获取l1、l2、当前结点值
while(l1 != null || l2 != null){//执行while循环来执行不确定长度链表
n1 = l1 == null ? 0 : l1.val;//如果l1当前结点为空,则n1为0。
n2 = l2 == null ? 0 : l2.val;
sum = n1 + n2 + carry;//head链表的当前结点值计算
if(head == null){//判断是否是第一次,将head头指针指向tail链表。
head = tail = new ListNode(sum % 10);
} else {
tail.next = new ListNode(sum % 10);//当前结点为tail,赋值时需要得到下一节点地址。
tail = tail.next;//将结点后移
}
carry = sum / 10;//计算进位值
if(l1 != null) l1 = l1.next;
if(l2 != null) l2 = l2.next;
}
if(carry > 0) tail.next = new ListNode(carry);//计算最后一次进位是否大于0,大于0就创建新结点并添加。
return head;
}
}