模仿大数加法,模拟相加的过程。由于链表是从尾部开始相加的,链表只有next域,所以必须先把链表反转,做大数加法的思路,得到一个新的链表,然后将新的链表反转即可。
1.ListNode l1, ListNode l2反转。
2.模拟大数加法,得到reslian
3.反转res
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode l1, ListNode l2) {
l1 = reverse(l1);//ListNode l1反转 l2 = reverse(l2);//ListNode l2反转 ListNode dummy = new ListNode(-1);//标记
int carry = 0;//进位
ListNode cur = dummy;//移动指针
while (l1 != null || l2 != null || carry > 0) {
//两个链表节点的值相加
int sum = 0;
if (l1 != null) {
sum += l1.val;
l1 = l1.next;
}
if (l2 != null) {
sum += l2.val;
l2 = l2.next;
}
sum += carry;
//余数作为新节点
ListNode newNode = new ListNode(sum % 10);
//取整作为进位值
carry = sum / 10;
cur.next = newNode;
cur = cur.next;//向后移动
}
return reverse(dummy.next);//得到的新链表反转
}
//反转链表(这里要很熟悉了!)
public ListNode reverse(ListNode head){
ListNode pre = null;
ListNode cur = head;
while(cur!=null){
ListNode next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
}

京公网安备 11010502036488号