思路:大数相加+链表反转
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
ListNode ans = new ListNode(-1);
ListNode p = ans;
int pre = 0;
head1 = reverse(head1);
head2 = reverse(head2);
while(head1!=null&&head2!=null){
int sum = head1.val+head2.val + pre;
pre = sum/10;
p.next = new ListNode(sum%10);
p = p.next;
head1 = head1.next;
head2 = head2.next;
}
while(head1!=null){
int sum = head1.val+pre;
pre = sum/10;
p.next = new ListNode(sum%10);
p = p.next;
head1 = head1.next;
}
while(head2!=null){
int sum = head2.val+pre;
pre = sum/10;
p.next = new ListNode(sum%10);
p = p.next;
head2 = head2.next;
}
if(pre == 1){
p.next = new ListNode(1);
}
//翻转链表
return reverse(ans.next);
}
public ListNode reverse(ListNode head){
//ListNode p = head;
ListNode pre = null;
while(head!=null){
ListNode next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
}
京公网安备 11010502036488号