思路
本来采用了栈的想法,按照他们依次push压栈,然后pop出来以后拼成一个整数然后相加以后依次连接成链表,但是没有考虑到整形溢出的情形。
实际上应该采用和微机原理中学到的相类似的方法,采用对应的位相加和进位标志(微机原理8086里面的CF,OF等)一起进行相加操作即可。
/**
* 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) {
ListNode pre=new ListNode(0);
ListNode p1=l1;
ListNode p2=l2;
ListNode temp=pre;
int x;
int y;
int carry=0;//进位
int data;//本位
while(p1!=null||p2!=null)
{
x=p1==null?0:p1.val;
y=p2==null?0:p2.val;
data=x+y+carry;
if(data>9)
{
carry=1;
data=data%10;
}else
{
carry=0;
}
temp.next=new ListNode(data);
temp=temp.next;
if(p1!=null) p1=p1.next;
if(p2!=null) p2=p2.next;
}
if(carry>0)
{
temp.next=new ListNode(carry);
}
return pre.next;
}
}