你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
样例
给出两个链表 3->1->5->null
和 5->9->2->null
,返回 8->0->8->null
/** * 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) { // write your code here if(l1 == null) return l2; if(l2 == null) return l1; ListNode result = null; ListNode pNode = null; ListNode pNext = null; ListNode p = l1; ListNode q = l2; int up=0; while(p!=null&&q!= null){ pNext = new ListNode(p.val+q.val +up); up = pNext.val/10; pNext.val = pNext.val%10; if(result == null){ result = pNode = pNext; } else{ pNode.next = pNext; pNode = pNext; } p = p.next; q = q.next; } while(p!= null){ pNext = new ListNode(p.val + up); up = pNext.val/10; pNext.val = pNext.val%10; pNode.next = pNext; pNode = pNext; p = p.next; } while(q!= null){ pNext = new ListNode(q.val + up); up = pNext.val/10; pNext.val = pNext.val%10; pNode.next = pNext; pNode = pNext; q = q.next; } if(up!= 0){ pNext = new ListNode(up); pNode.next = pNext; } return result; } }