题解 | #链表相加(二)#
链表相加(二)
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 if (head1 == null || head2 == null){ return head1== null ? head2 : head1; } head1=reverse(head1); head2=reverse(head2); ListNode result = new ListNode(-1); ListNode head = result; int carry = 0; while(head1!=null || head2 !=null){ int tmp =0; if(head1 != null){ tmp += head1.val; head1 = head1.next; } if(head2 !=null){ tmp += head2.val; head2 = head2.next; } // System.out.println("a2:"+add2); tmp = tmp +carry ; result.next = new ListNode(tmp%10); System.out.println("tmp:"+tmp%10); carry = tmp/10; System.out.println("carry:"+carry); result = result.next; } if(carry>0){ // System.out.println("carry>0"); result.next = new ListNode(carry); System.out.println("val:"+result.next.val); // result = result.next; } return reverse(head.next); } // 反转链表 public ListNode reverse(ListNode head){ // 记录翻转位置 ListNode cur = head.next; System.out.println("cur val"+cur.val); ListNode pre = head; while(cur!=null){ // 暂存翻转后的下一个位置 ListNode tmp = cur.next; cur.next = pre; pre = cur; cur = tmp; } head.next = null; return pre; } }