描述
假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
数据范围:0 \le n,m \le 10000000≤n,m≤1000000,链表任意值 0 \le val \le 90≤val≤9
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。
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) {
ListNode initNode=new ListNode(0);
head1=ReverseList(head1);
head2=ReverseList(head2);
ListNode curNode=initNode;
int bit=0;
while (head1!=null || head2 !=null){
int sum=bit;
if(head1!=null){
sum+=head1.val;
head1=head1.next;
}
if(head2 !=null){
sum+=head2.val;
head2=head2.next;
}
bit=sum>=10?1:0;
curNode.next=new ListNode(sum%10);
curNode= curNode.next;
}
if(bit==1){
curNode.next=new ListNode(1);
}
return ReverseList(initNode.next);
}
//反转链表
public ListNode ReverseList(ListNode head) {
//1->2->3->4
ListNode pre=null;
ListNode nextNode=null;
while (head!=null){
nextNode= head.next;
head.next=pre;
pre=head;
head=nextNode;
}
return pre;
}
}