【链表】【打卡127天】:leetcode 2. 两数相加

1、题目描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

2、算法分析

 本题求的是两个链表结点值的和,并且它们每位数字都是按照 逆序 的方式存储的。求逆序结点算式和组成的新的链表。

分为以下几个步骤。

①创建一个结果链表

②遍历l1,l2链表

③并计算进位的数、某位的数,并连接链表

④最后注意进位的数要是0的话,就舍弃了。这是从最后一个例子:示例3得来的。

最后返回的是链表的第一个结点

3、代码实现

/**
 * 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 node = new ListNode(0);
        ListNode current = node;
        int z = 0;
        while(l1 != null || l2 != null){
            int x = 0,y = 0;
            if(l1 != null){
                x = l1.val;
            }
            if(l2 != null){
                y = l2.val;
            }
            int sum = x + y + z;
            // 进位的树
            z = sum / 10;
            // 某位的数
            sum = sum % 10;
            current.next = new ListNode(sum);
            current = current.next;
            if(l1 != null){
                l1 = l1.next;
            }
            if(l2 != null){
                l2 = l2.next;
            }
        }
        if(z == 1){
            current.next = new ListNode(z);
        }
        return node.next;
    }
}

Guess you like

Origin blog.csdn.net/Sunshineoe/article/details/121630973