zoukankan      html  css  js  c++  java
  • leetcode Add Two Numbers

    这个题目没有什么特点,但我好像写的不是很好,仍有一些空间时间上的浪费。不过在这里记下来一些我和OJ的交互。

    写这个题目时,我是写完直接提交的,因为觉得测试数据还好复杂。后来就遇到了各种错误,先是报的逻辑上的错误,改了。后来报的是memory limited,后来想是不是因为三个链表不好。那就把一个链表加到另一个链表中不新建了。然后没写,后来又想我直接释放掉用过的节点是不是更少内存呢。试验后依然有memory limited,认真看了看是一个循环没有退出去。再后来又遇到runtime error这个错误我见得多了,肯定是指针错误了,认真查了一遍改了改,最后算是过了。

    代码:

    #include<iostream>
    
    using namespace std;
    
    struct ListNode
    {
        int val;
        ListNode *next;
    };
    
    ListNode *addTwoNumbers(ListNode *l1, ListNode *l2)
    {
        ListNode *l3 = (ListNode*)malloc(sizeof(ListNode));
        ListNode *r = l3;
        ListNode *p = l1;
        ListNode *q = l2;
        int c = 0;
        while (p != NULL || q != NULL||c!=0)
        {
            r->next = (ListNode*)malloc(sizeof(ListNode));
            r = r->next;
            if (p == NULL&q == NULL)
            {
                r->val = c;
                r->next = NULL;
                c = 0;
            }
            else
            {
                if (p != NULL&&q == NULL)
                {
                    int t = p->val + c;
                    r->val = t % 10;
                    c = t / 10;
                    r->next = NULL;
                    ListNode* z = p;
                    p = p->next;
                    delete(z);
                }
                else if (q != NULL&&p == NULL)
                {
                    int t = q->val + c;
                    r->val = t % 10;
                    c = t / 10;
                    r->next = NULL;
                    ListNode * z = q;
                    q = q->next;
                    delete(z);
                }
                else
                {
                    int t = p->val + q->val + c;
                    c = t / 10;
                    r->val = t % 10;
                    r->next = NULL;
                    ListNode * z1 = p;
                    p = p->next;
                    ListNode *z2 = q;
                    q = q->next;
                    delete(z1);
                    delete(z2);
                }
            }
        }
        return l3->next;
    }
    
    int main()
    {
        ListNode * l1 = (ListNode*)malloc(sizeof(ListNode));
        ListNode *l2 = (ListNode*)malloc(sizeof(ListNode));
        l1->val = 9;
        /*l1->next = NULL;*/
        ListNode * p = l1->next = (ListNode*)malloc(sizeof(ListNode));
        p->val = 9;
        p->next = NULL;
        l2->val = 9;
        l2->next = NULL;
        ListNode *l3 = addTwoNumbers(l1, l2);
        ListNode *r;
        for (r = l3; r != NULL; r = r->next)
            cout << r->val << "    " << endl;
    }
  • 相关阅读:
    Linux的各个文件夹名称解释(FHS)
    ThinkPHP3.1URL分发BUG修正
    HTTP响应头缓存控制
    Web性能测试工具:http_load安装&使用简介
    无法登陆github官网的解决办法
    次梯度(Subgradient)
    科普帖:深度学习中GPU和显存分析
    关于图像分类的问题
    深度学习中的多尺度模型设计
    Pytorch模型定义的三要
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4314878.html
Copyright © 2011-2022 走看看