力扣练习之两数相加

我爱海鲸 2023-01-21 14:01:44 力扣

简介中级算法、链表

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvw73v/

解法一:

/**
 * 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 resultNode = new ListNode(0);

        ListNode preNode = resultNode;

        int carry = 0; // 0表示没有进位,1表示进位了
        while (l1 != null || l2 != null || carry != 0) {
            int sum = carry; // 加上进位的数

            if (l1 != null) {
                sum += l1.val;
                l1 = l1.next;
            }

            if (l2 != null) {
                sum += l2.val;
                l2 = l2.next;
            }

            preNode.next = new ListNode(sum % 10);
            carry = sum/10;
            preNode = preNode.next;

        }

        return resultNode.next;
    }
}

思路:两个链表逆序保存一位的整数,我们需要将他们相加形成一个新的整数链表,要想加,那就是遍历链表,遍历的过程中会有一个问题,那就是相加会有一个进位的过程,我们可以使用一个中间的变量来保存是否进位,1就是进位,0表示不进位,然后循环遍历的条件就是两个链表都不为null且中间变量不为0.

 

你好:我的2025