模仿大数加法,模拟相加的过程。由于链表是从尾部开始相加的,链表只有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; } }