• 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;
    }
  • 相关阅读:
    微信开放平台:OpenAPI、云开发与基础管理能力升级
    腾讯刘颖:从容器到低代码,腾讯云原生技术演进历程
    十年老站长心声:我为什么选择把 Hexo 网站迁移到 Webify
    腾讯云发布微搭生态开放计划,与合作伙伴携手共创产业未来
    SQL Server附加数据库出现错误5123的正确解决方法
    数据分页获取(二)
    Select语句
    数据分页获取(一)
    SQL Server中行转列原理
    QT实现Linux下系统监控小工具之二
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4314878.html
Copyright © 2020-2023  润新知