lotus

贵有恒何必三更眠五更起 最无益只怕一日曝十日寒

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1. 题目

 

 

 

 https://leetcode.cn/problems/add-two-numbers/

 

 

2. 解法

 

解答思路。

为了解决这个问题,我们需要模拟两数相加的过程,从低位到高位,逐位相加,并考虑进位的情况。我们可以使用以下的步骤:

  1. 创建一个虚拟头节点,它不存储任何值,只是为了方便返回结果链表的头节点。
  2. 创建一个当前节点指针,指向虚拟头节点。
  3. 创建一个进位标志,初始为0。
  4. 遍历两个链表,直到两个链表都遍历完毕。
    • 取出两个链表中对应位置的值,如果某个链表为空,则取0。
    • 将这两个值加上进位标志,得到当前位的和。
    • 用除以10的商来更新进位标志,用余数来创建一个新节点,存储当前位的值。
    • 将当前节点指针的下一个节点指向这个新节点,并将当前节点指针移动到下一个节点。
  5. 如果最后还有进位,创建一个新节点,存储进位值,并将当前节点指针的下一个节点指向这个新节点。
  6. 返回虚拟头节点的下一个节点,即结果链表的头节点。

这样,我们就完成了两数相加的问题。

 

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {

        int carry = 0;
        StringBuilder sb = new StringBuilder();
        ListNode dummy = new ListNode(-1);
        ListNode curr = dummy;
        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;
            }
            curr.next = new ListNode(sum % 10);
            curr = curr.next;
            carry = sum / 10;

        }
        return dummy.next;

    }

  

3. 总结

posted on 2023-04-18 16:33  白露~  阅读(14)  评论(0编辑  收藏  举报