原题链接
这题思路很简单,分为三个步骤:
- 获取l1和l2的长度,并对短的链表进行补零
- 两个对应节点的值相加
注意:在进行两个对应节点的值相加时,链表末尾相加后,可能会大于10,这个时候需要在添加一个数
代码:
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode p1 = l1;
ListNode p2=l2;
//1.获取l1和l2的长度,并对短的链表进行补零
int count1 = 1, count2 = 1;
//我想要的是l2的末尾(不是null),
// 如果使用的是:
// while(l1!=null){
// l1=l1.next;
// }
//我得到的是null,注意这两种的区别哦
while (l1.next!= null) {
count1++;
l1 = l1.next;
}
while (l2.next!= null) {
count2++;
l2 = l2.next;
}
//怎么补零呢?
ListNode p=l1;
ListNode q=l2;
if (count1 > count2) {//l2短
for (int i = 0; i < count1 - count2; i++) {
q.next = new ListNode(0);
q=q.next;
}
} else {//l1短
for (int i = 0; i < count2 - count1; i++) {
p.next = new ListNode(0);
p = p.next;
}
}
//2.两个对应节点的值相加
ListNode dummy = new ListNode(0);
ListNode result = dummy;//result.next就是最终的返回结果
int count = 0;
//怎么处理链表的最后一个位数呢?l1:1->7 l2:2->4
while (p1 != null && p2 != null) {
int i = p1.val + p2.val + count;
if (i >= 10) {
count = 1;
ListNode p3 = new ListNode(i % 10);
dummy.next = p3;
dummy = p3;
} else {
count = 0;
ListNode p3 = new ListNode(i % 10);
dummy.next = p3;
dummy = p3;
}
p1=p1.next;
p2=p2.next;
}
//怎么处理链表的最后一个位数呢?l1:1->7 l2:2->4,如果count==1,则进一位,多加个节点
if(count==1){
ListNode p3 = new ListNode(1);
dummy.next = p3;
dummy = p3;
}
return result.next;
}
}