zoukankan      html  css  js  c++  java
  • 2.5链式A+B

    有两个用链表表示的整数,每个结点包含一个数位。这些数位是反向存放的,也就是个位排在链表的首部。编写函数对这两个整数求和,并用链表形式返回结果。

    给定两个链表ListNode* A,ListNode* B,请返回A+B的结果(ListNode*)。

    测试样例:
    {1,2,3},{3,2,1}
    返回:{4,4,4}

    学习总结:1.进位的时候用一个标志temp 2.新建一个链,可以使用new方法 3.注意判断各种长短情况
    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) : val(x), next(NULL) {}
    };*/
    class Plus {
    public:
        ListNode* plusAB(ListNode* a, ListNode* b) {
            // write code here
            //思考:如果是没有进位的情况,只要一个加一个就好了,
            //循环中需要考虑两个链表的共同长度,可能一个结束了,一个还没有结束。
            //可以用0来填补那个空的,相加起来,但是究竟哪个长,哪个短?不好判断啊
            //看了别人讨论的结果,发现进位很简单,只要加入个temp进位就可以了,其他的编写和我
            //写的差不多,就是通不过啊,不造怎么回事儿。
            ListNode* s = NULL;
            ListNode* pHead = NULL;
            int temp = 0;
            int sum = 0;
            if(a == NULL || b == NULL) return NULL;
            for(a, b; a != NULL && b != NULL; a = a->next, b = b->next){
                if(s == NULL){
                    sum = a->val + b->val;
                    s = a;
                    s->val = sum % 10;
                    temp = sum / 10;
                    pHead = s;
                }
                else{
                    sum = a->val + b->val + temp;
                    temp = sum / 10;
                    s->next->val = sum % 10;
                    s->next = a;
                    s = a;
                }
            }
            if(a == NULL && b != NULL){
                for(b; b != NULL; b = b->next){
                    s->next = b;
                    sum = b->val + temp;
                    b->val = sum % 10;
                    temp = sum / 10;
                }
            }
            if(a != NULL && b == NULL){
                for(a; a != NULL; a = a->next){
                    sum = a->val + temp;
                    a->val = sum % 10;
                    temp = sum / 10;
                }
            }
            else{
                if(temp > 0){
                    ListNode* newNode = new ListNode(temp); //新建一个链路的写法。
                    s->next = newNode; 
                }   
            }
            return pHead;
        }
    };
  • 相关阅读:
    严选B端产品设计原则
    从严选供应链采购看业务系统架构
    网易严选数据任务治理实践
    hibernate主键生成策略
    the user operation is waiting
    hibernate入门案例
    jsp重定向和转发
    jsp编码过程
    在eclipse中部署jsp项目
    oracle误删表解决方案
  • 原文地址:https://www.cnblogs.com/xiaohaigege/p/5378366.html
Copyright © 2011-2022 走看看