You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
两个链表分别从第一个结点开始分别相加,大于10的进位和下两个结点的值一起相加直至两个结点都到链表的结尾,如果到链表结尾仍然有进位,创建一个新的节点放在较长的那个链表的后面。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public ListNode addTwoNumbers(ListNode l1, ListNode l2) { int len1=0,len2=0; int sum=0,flag=0; ListNode pListNode=null; for(pListNode=l1;pListNode!=null;pListNode=pListNode.next) { if(pListNode!=null) len1++; } for(pListNode=l2;pListNode!=null;pListNode=pListNode.next) { if(pListNode!=null) len2++; } if(len1>len2) pListNode=l1; else pListNode=l2; ListNode listNode=pListNode; while(l1!=null&&l2!=null) { sum=l1.val+l2.val+flag; pListNode.val=sum%10; pListNode=pListNode.next; flag=sum/10; l1=l1.next; l2=l2.next; } while(pListNode!=null) { sum=pListNode.val+flag; pListNode.val=sum%10; flag=sum/10; if(flag==0) break; pListNode=pListNode.next; } if(flag!=0) { ListNode li =listNode; while(li.next!=null) li=li.next; ListNode temp=new ListNode(flag); li.next=temp; } return listNode; }
原文地址:http://blog.csdn.net/mnmlist/article/details/43198615