这几天刚来上海啊,天天下雨。。。不过还是想着明天要去实习公司报告了,心里还是很激动的,哈哈。刷个题呀!再加油呀!!!
题目 两数相加(中等)
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int sinal=0;
ListNode ret = null;
int num1 = 1,
num2 = 1;
ListNode count1 = l1;
ListNode count2 = l2;
while(count1.next!=null||count2.next!=null){
if(count1.next!=null){
num1++;
count1 = count1.next;
}
else{
num2++;
count2 = count2.next;
}
}
if(num1-num2==0){
num1 = 0;
ret = l1;
}
else if(num1-num2>0){
num1 = 1;
ret = l1;
}
else{
num1=-1;
ret = l2;
}
while(l1!=null&&l2!=null){
if((l1.val+l2.val+sinal)/10==1){
if(num1>=0){
l1.val = (l1.val+l2.val+sinal)%10;
}
else{
l2.val = (l1.val+l2.val+sinal)%10;
}
sinal = 1;
}
else{
if(num1>=0){
l1.val = l1.val+l2.val+sinal;
}
else{
l2.val = l1.val+l2.val+sinal;
}
sinal=sinal>0?0:0;
}
l1= l1.next;
l2 = l2.next;
}
if(num1>0){
ListNode tail = null;
while(null!=l1){
if((l1.val+sinal)/10==1){
l1.val = (l1.val+sinal)%10;
sinal = 1;
}
else{
l1.val = (l1.val+sinal)%10;
return ret;
}
if(null==l1.next){
tail = l1;
}
l1=l1.next;
}
if(1==sinal){
ListNode ln = new ListNode(1);
tail.next = ln;
}
return ret;
}
if(num1<0){
ListNode tail = null;
while(null!=l2){
if((l2.val+sinal)/10==1){
l2.val = (l2.val+sinal)%10;
sinal = 1;
}
else{
l2.val = (l2.val+sinal)%10;
return ret;
}
if(null==l2.next){
tail = l2;
}
l2=l2.next;
}
if(1==sinal){
ListNode ln = new ListNode(1);
tail.next = ln;
}
return ret;
}
else{
if(1==sinal){
ListNode ln = new ListNode(1);
l1=ret;
while(l1.next!=null){
l1=l1.next;
}
l1.next = ln;
}
return ret;
}
}
}
赶着出去逛,哈哈,再更啊。