游戏-力扣每日

112 阅读1分钟

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;
    }
}