思路 本来采用了栈的想法,按照他们依次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; } }