题解 | #链表相加(二)#
链表相加(二)
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; } }