链表表示两个大数的相加

发布于 / 算法 / 0条评论 / Tags: 算法 / 4 次浏览

用链表表示10进制的某一位,这样可以计算大数的相加:如
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.

[1]思路:遍历链表,保存进位

/**
 * 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) {
          int pre= 0;
        
        ListNode r = new ListNode(-1);
        ListNode p0 = r;
        ListNode p_1 = null;
        ListNode p1 = l1;
        ListNode p2 = l2;
        while(p1 != null || p2 != null || pre > 0){
           int v = p1 ==null ? 0 : p1.val;
           v = p2 ==null ? v : v + p2.val;
           v = v + pre;
            pre = v / 10;
           if(p1 != null){
                p1 = p1.next;
           }
           if(p2 != null){
              p2 = p2.next;
           }
          
           p0.val = v % 10;
           p0.next = new ListNode(-1);
           p_1 = p0;
           p0 = p0.next;
            
        }
       p_1.next = null;
       
        return r;
    }
}

    评论区(暂无评论)