Java解法
这个题的解法并不难想,就是从前往后加,有进位就记录下来,取余得到的结果就是当前位数的值。不过有两个地方容易走弯路:
一是新链表的生成,一般需要一个预指针pre,因为在后面当前cur指针移动的时候,会不断向后移动,返回的时候会失去头指针。还有就是,没有预指针的情况下,新链表的头指针要有专门的判断,后面的节点才能挂上去。
二是两个链表长度不一致时,当一个链表遍历结束后,要不要跳出循环,跳出循环的话,还要判断哪个为null,再拼到新链表后面,比较麻烦,可以采用高位补0的方式,为null的链表,计算时加0就不用关注这个问题啦。还有就是最后有进位的情况下,需要为进位新建节点。
/**
* 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 pre = new ListNode(0);
ListNode cur = pre;
int carrier = 0;
while (l1 != null || l2 != null) {
int x = 0;
int y = 0;
if (l1 != null) {
x = l1.val;
}
if (l2 != null) {
y = l2.val;
}
int sum = x + y + carrier;
int num = sum % 10;
carrier = sum / 10;
cur.next = new ListNode(num);
cur = cur.next;
if (l1 != null) {
l1 = l1.next;
}
if (l2 != null) {
l2 = l2.next;
}
}
if (carrier > 0) {
cur.next = new ListNode(carrier);
}
return pre.next;
}
}
网友评论