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