题解 | #链表相加(二)#
链表相加(二)
https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
import java.util.*; /* * public class ListNode { * int val; * ListNode next = null; * public ListNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head1 ListNode类 * @param head2 ListNode类 * @return ListNode类 */ public ListNode addInList (ListNode head1, ListNode head2) { if (head1 == null) { return head2; } if (head2 == null) { return head1; } // 将链表进行反转,然后相加,最后将相加的结果进行反转 ListNode node1 = reverse(head1); ListNode node2 = reverse(head2); int carry = 0; // 进制 ListNode pre = new ListNode(-1); ListNode head = pre; while (node1 != null || node2 != null || carry != 0) { int val1 = node1 == null ? 0 : node1.val; int val2 = node2 == null ? 0 : node2.val; int sum = val1 + val2 + carry; carry = sum / 10; sum = sum % 10; head.next = new ListNode(sum); head = head.next; if (node1 != null) { node1 = node1.next; } if (node2 != null) { node2 = node2.next; } } return reverse(pre.next); } public ListNode reverse(ListNode head) { if (head == null) { return null; } ListNode cur = head; ListNode pre = null; while (cur != null) { ListNode temp = cur.next; cur.next = pre; pre = cur; cur = temp; } return pre; } }
代码的截图思路和刚才两个数相加的思路是一致的,不过是通过链表进行操作而不是数组或者字符串