题解 | #链表相加(二)#
链表相加(二)
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) { if(head1 == null || head2 == null){ return head1 == null ? head2 : head1; } //两个都不为空,先反转,再相加,最后再反转回来 ListNode revert1 = revert(head1); ListNode revert2 = revert(head2); int carry = 0; ListNode dummy = new ListNode(-1), cur = dummy; while(revert1 != null || revert2 != null){ int val = (revert1 != null ? revert1.val : 0) + (revert2 != null ? revert2.val : 0) + carry; cur.next = new ListNode(val % 10); cur = cur.next; carry = val / 10; if(revert1 != null){ revert1 = revert1.next; } if(revert2 != null){ revert2 = revert2.next; } } //这个点要注意:如果最后了还有个进位1,一定也要拼上 if(carry == 1){ cur.next = new ListNode(1); } return revert(dummy.next); } private static ListNode revert(ListNode head){ ListNode pre = null, cur = head; while(cur != null){ ListNode next = cur.next; cur.next = pre; pre = cur; cur = next; } return pre; } }#学习##刷题##每日刷题#