LeetCode Hot 100 --- 两数相加(java)
Posted 小样5411
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Hot 100 --- 两数相加(java)相关的知识,希望对你有一定的参考价值。
题目
代码
这题与之前写过的牛客Top200—链表相加,十分相似,只不过一个往右进位,一个往左进位,往左进位是我们正常算数的规则,往左的链表相加需要先反转链表,而题中说明是往右进位,所以这个不用反转
最优解
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int carry = 0;
ListNode head = new ListNode(-1);//头结点
ListNode cur = head;
while(l1 != null || l2 != null){
//两个链表的结点值,如果长度不一致相加就补零
int num1 = (l1 == null) ? 0 : l1.val;
int num2 = (l2 == null) ? 0 : l2.val;
int sum = num1 + num2 + carry;
carry = sum / 10; //更新进位
ListNode node = new ListNode(sum % 10);
cur.next = node;
cur = cur.next;
//l1、l2均后移
if(l1 != null){
l1 = l1.next;
}
if(l2 != null){
l2 = l2.next;
}
}
//最后一位相加后,若carry进位不为0,则还需要进位
if(carry != 0){
ListNode node = new ListNode(carry);
cur.next = node;
}
return head.next;
}
}
以上是关于LeetCode Hot 100 --- 两数相加(java)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode Hot 100 --- 两数之和(java)
Leetcode刷题100天—2. 两数相加( 链表)—day60