LeetCode-两数相加
2020-03-26 本文已影响0人
沙漠小舟
题目链接 => 戳这里
其实这道题理解之后本身并不难,需要注意的有3点:
1.链表节点位置的转移需要细心点,每条链表上的节点都要记得转移到下一节点;
2.另外就是需要保存好dummyNode头结点,不能直接用它来转移节点位置,不然后面我们就无法返回链表头结点指针了;
3.比较容易忽略的情况是两个数值链表的最后节点相加,产生了进位,这时我们还需要新建节点,用于存储该进位值。
为了帮助自己理解算法流程,可以想象一下自己在做竖式加法,其实他们的方式是一样的。
解法
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyNode = new ListNode(0);
ListNode p = l1, q = l2, t = dummyNode;
int carry = 0;
while (p != null || q != null) {
int m = p == null ? 0 : p.val;
int n = q == null ? 0 : q.val;
int sum = carry + m + n;
carry = sum / 10;
ListNode temp = new ListNode(sum % 10);
t.next = temp;
t = t.next;
if (p != null) {
p = p.next;
}
if (q != null) {
q = q.next;
}
}
if (carry > 0) {
ListNode appednNode = new ListNode(carry);
t.next = appednNode;
}
return dummyNode.next;
}
}