zoukankan      html  css  js  c++  java
  • 链表实现大整数相加

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef struct node
    {
        int value;
        node *next;
    }linklist;
    
    linklist* ReverseList(linklist *head){
        linklist *next;
        linklist *pre = NULL;
        while (head != NULL) {
            next = head->next;
            head->next = pre;
            pre = head;
            head = next;
        }
        return pre;
    }
    
    linklist* ADD(linklist*L1, linklist*L2){
        linklist *l1 = ReverseList(L1);
        linklist *l2 = ReverseList(L2);
        linklist *res = NULL, *p;
        int num = 0, sum;
        while(l1 || l2){
            if(l1 && l2){
                sum = l1->value + l2->value + num;
                l1 = l1->next;
                l2 = l2->next;
            } else if(l1){
                sum = l1->value + num;
                l1 = l1->next;
            } else if(l2){
                sum = l2->value + num;
                l2 = l2->next;
            }
    
            num = sum/10;
            sum = sum%10;
            linklist *tmp = new linklist();
            tmp->value = sum;
    
            if(res == NULL){
                res = tmp;
                p = res;
            } 
            else {
                p->next = tmp;
                p = p->next;
            }
        }
        res = ReverseList(res);
        return res;
    }
    
    linklist* CreateList(int Size){
        int num;
        linklist *head = NULL, *p;
        while(Size--){
            cin >> num;
            linklist *tmp = new linklist();
            tmp->value = num;
            if(head == NULL){
                head = tmp;
                p = head;
            }else {
                p->next = tmp;
                p = p->next;
            }
        }
        return head;
    }
    
    void PRINT(linklist *head){
        linklist *p = head;
        if(p != NULL){
            cout << p->value;
            p = p->next;
        }
        while(p != NULL){
            cout << "->" << p->value ;
            p=p->next;
        }
        cout << endl;
    }
    
    
    int main(){
    
        int n, m;
        cin >> n >> m;
        linklist *L1 = CreateList(n);
        //PRINT(L1);
        linklist *L2 = CreateList(m);
        //PRINT(L2);
        linklist *L3 = ADD(L1, L2);
        PRINT(L3);
        return 0;
    }
    /*
    输入:
    5 3
    3 1 4 6 7
    2 3 3
    输出结果:
    3->1->7->0->0
    
    时间复杂度为O(max(n,m)),空间复杂度为O(max(n,m));
    若可以修改原链表结构,可将空间复杂度降为O(1);
    */
  • 相关阅读:
    9.10 作业
    Day 03 作业
    Day02作业
    Day09 函数
    day08 简单习题
    Day04 python数据类型和词云的生成
    JAVA: 子类通过static块“覆盖”父类的成员变量风险
    JAVA: 子类“覆盖”父类的成员变量
    Java 访问控制权限
    Java数组类型转为集合类型
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/13674488.html
Copyright © 2011-2022 走看看