题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
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 head1, ListNode head2) {
// write code here
ListNode l1 = reverse(head1);
ListNode l2 = reverse(head2);
ListNode result = null;
int flag = 0;
int i = 0;
//考虑(6,3)(1,1)这种情况
while (l1 != null && l2 != null) {
ListNode temp = new ListNode((l1.val + l2.val + flag) % 10);
flag = (l1.val + l2.val + flag) / 10;
temp.next = result;
result = temp;
l1 = l1.next;
l2 = l2.next;
System.out.print(++i);
System.out.println(result.val);
}
//考虑(6,3)(1)这种情况
if (l2 == null) {
while (l1 != null) {
ListNode temp = new ListNode((l1.val + flag) % 10);
flag = (l1.val + flag) / 10;
temp.next = result;
result = temp;
l1 = l1.next;
}
}
//考虑(1)(6,3)这种情况
if (l1 == null) {
while (l2 != null) {
ListNode temp = new ListNode((l2.val + flag) % 10);
flag = (l2.val + flag) / 10;
temp.next = result;
result = temp;
l2 = l2.next;
}
}
//考虑最后结果为1000这种的。(1是进位)
if (flag == 1) {
ListNode temp = new ListNode(flag);
temp.next = result;
result = temp;
}
return result;
}
//头插法逆序
public ListNode reverse(ListNode head) {
ListNode q = null;
ListNode p = head;
while (p != null) {
ListNode Temp = p.next;
p.next = q;
q = p;
p = Temp;
}
return q;
}
}

