题目描述:
给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
解题思路:
创建数组–》将链表转换为数值进行加法运算,从数组后面进行判断,若大于十,将前一位进行加一,该数值减十,最后将数组转换为链表。
代码附上:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
int x=size(l1),y=size(l2),i=1,j=0;
int[] data=new int[x>=y?x+1:y+1];
ListNode head=null,l3=null,l4=null;;
if(x>=y) {
l3=l1;
l4=l2;
} else {
l3=l2;
l4=l1;
}
while(l3!=null) {
data[i]=l3.val;
i++;
l3=l3.next;
}
j=data.length-size(l4);
while(l4!=null) {
data[j]+=l4.val;
j++;
l4=l4.next;
}
for(int k=data.length-1;k>0;k--) {
if(data[k]>=10) {
data[k-1]+=1;
data[k]-=10;
}
}
if(data[0]!=0) {
if(x>=y) {
head=new ListNode(data[0],l1);
l3=l1;
}
else {
head=new ListNode(data[0],l2);
l3=l2;
}
} else {
if(x>=y) {
head=l1;
l3=l1;
} else {
head=l2;
l3=l2;
}
}
j=1;
while(l3!=null) {
l3.val=data[j];
j++;
l3=l3.next;
}
return head;
}
public int size(ListNode text) {
int x=0;
while(text!=null) {
x++;
text=text.next;
}
return x;
}
}