题解 | #链表相加(二)#
链表相加(二)
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) { // write code here // 反转链表,因为链表进位是从后往前,需要先反转链表 ListNode reverse1 = reverse(head1); ListNode reverse2 = reverse(head2); // 相加链表 ListNode pre = null; // 进位的值 int carry = 0; while (reverse1 != null && reverse2 != null) { int val1 = reverse1.val; int val2 = reverse2.val; // 链表相加的值 int total = val1 + val2 + carry; int rel = total % 10; carry = total > 9 ? 1 : 0; ListNode temp = new ListNode(rel); temp.next = pre; pre = temp; // 链表遍历完毕,终止循环 if (reverse1.next == null && reverse2.next == null) { break; } else { // 当2个链表长度不一时,一个链表遍历完成后,向其尾部添加一个值为0的节点,直到和另外一个链表长度相同 if (reverse1.next == null) { ListNode temp1 = new ListNode(0); reverse1.next = temp1; } if (reverse2.next == null) { ListNode temp1 = new ListNode(0); reverse2.next = temp1; } } reverse1 = reverse1.next; reverse2 = reverse2.next; } // 链表遍历相加完成后,如果最后还有进位,则继续添加链表 if (carry != 0) { ListNode temp = new ListNode(carry); temp.next = pre; pre = temp; } return pre; } public ListNode reverse(ListNode listNode) { ListNode pre = null; while (listNode != null) { ListNode next = listNode.next; listNode.next = pre; pre = listNode; listNode = next; } return pre; } }