[LeetCode] Add Two Numbers

LeetCode两数相加题解
本文针对LeetCode上的一道经典题目——两数相加进行了解析。该题目要求将两个非负整数以链表形式表示,并以逆序方式存储每个节点的单个数字,最终返回两个数相加的结果作为链表。文章提供了详细的解题思路及Java代码实现。

题目链接: https://oj.leetcode.com/problems/add-two-numbers/

 

问题:

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contains a single digit. Add the two numbers and return it as a linked list.

Input: (2->4->3) + (5->6->4) Output: 7->0->8

 

解题思路:

1)用变量carry记录是否进位

2)从链表头开始计算两链表相应位置上的数字之和

注意

1)输入两链表长度不相等

2)两链表相加之后的结果链表长度可能大于两链表(例如:(9->9) + (1) = (0->0->1)

 1         public ListNode addTwoNumbers(ListNode l1, ListNode l2){
 2         ListNode dummyHead = new ListNode(0);
 3         ListNode p = l1;
 4         ListNode q = l2;
 5         ListNode curr = dummyHead;
 6         int carry = 0;
 7         while(p != null || q != null){
 8             int x = (p != null) ? p.val : 0;
 9             int y = (q != null) ? q.val : 0;
10             int digit = carry + x + y;
11             curr.next = new ListNode(digit % 10);
12             curr = curr.next;
13             carry = digit / 10;
14             if(p != null){
15                 p = p.next;
16             }
17             if(q != null){
18                 q = q.next;
19             }
20         }
21         if(carry > 0){
22             curr.next = new ListNode(carry);
23         }
24         return dummyHead.next;
25     }

 

转载于:https://www.cnblogs.com/momo-fun/p/5784845.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值