• LeetCode #2 Add Two Numbers 双链归并 链表


    Description


    You are given two non-empty linked lists representing two non-negative integers. 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.

    You may assume the two numbers do not contain any leading zero, except the number 0 itself.

    Example

    Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
    Output: 7 -> 0 -> 8
    Explanation: 342 + 465 = 807. 

    思路


      这是一个用链表处理大数相加的问题,我首先联想到的就是之前做过的多项式相加,本题不过是 low 版本的多项式相加问题。处理的思路很类似,先将第一个链表和第一个链表的相同位数的数字相加,将相加的值存储到第三个链表上。当其中一个链表已经遍历完而另一个链表还有未遍历完的时候,就将未遍历完的数字存储到第三个链表上即可。最后将第三个链表遍历一遍,处理数字满十进一位的情况。我这个方法可能有些暴力,如果你有更好的方法,欢迎指点。

    //Runtime: 45 ms
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
            ListNode *p1, *p2, *p3, *t3, *l3Head;
            p1 = l1;
            p2 = l2;
            l3Head = NULL;
            while((p1!=NULL) && (p2!=NULL)) {
                p3 = new ListNode(p1->val + p2->val);
                p1 = p1->next;
                p2 = p2->next;
                if(l3Head == NULL) {
                    t3 = l3Head = p3;
                }
                else{
                    t3->next = p3;
                    t3 = p3;
                }
            }
            while(p1 != NULL) {
                p3 = new ListNode(p1->val);
                t3->next = p3;
                t3 = p3;
                p1 = p1->next;
            }
            while(p2 != NULL) {
                p3 = new ListNode(p2->val);
                t3->next = p3;
                t3 = p3;
                p2 = p2->next;
            }
            
            p3 = l3Head;         
            while(p3 != NULL) {
                if(p3->val >= 10) {
                    p3->val = p3->val % 10;
                    if(p3->next == NULL) {
                        p3->next = new ListNode(1);
                    }
                    else {
                       p3->next->val = p3->next->val + 1;
                    }
                }
                p3 = p3->next;
            }
            
            return l3Head;
        }
    };

      

    ————全心全意投入,拒绝画地为牢
  • 相关阅读:
    023 AQS--JUC的核心
    022 Future接口
    021 Callable接口
    020 线程的综合考虑
    019 线程协作
    命令,lldb,llvm,gdb,gcc,
    @class,import,
    arc,自动引用计数,
    写在哪里,
    40岁生日,
  • 原文地址:https://www.cnblogs.com/Bw98blogs/p/8072204.html
Copyright © 2020-2023  润新知