题目
你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例
给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null
基本思路
这道题需要考虑到大数据求和时的溢出问题,所以不选择将两个链表遍历完成后相加之后进行链表添加。我选择单独取出各链表对应位数值相加后同步进行链表添加,在这里需要注意的是进位后的后位+1的处理。
其他基本操作见代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/*
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
public ListNode addLists(ListNode l1, ListNode l2) {
boolean isCarry=false;
ListNode reslut=new ListNode(-1);
int preNum=0;
while(l1 !=null || l2 !=null || preNum>=10)
{
int num1=0,num2=0;
if(l1 !=null)
{
num1=l1.val;
l1=l1.next;
}
if(l2 !=null)
{
num2=l2.val;
l2=l2.next;
}
int temp=num1+num2;
//标记下一位需要进位处理
if(preNum>=10)
{
temp++;
}
preNum=temp;
temp=temp %10;
ListNode tempNode=reslut;
while(tempNode.next !=null)
{
tempNode=tempNode.next;
}
tempNode.next=new ListNode(temp);
}
return reslut.next;
}
}