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;
    }
  • 相关阅读:
    接口:
    抽象类:
    构造方法与重载
    get方法和set方法
    类的成员变量与方法、构造方法
    构造方法
    Java面向对象学习-----类的成员变量2
    Java面向对象学习-----类的成员变量
    java字符串分割
    android 使用讯飞人脸识别api报错:java.lang.UnsatisfiedLinkError
  • 原文地址:https://www.cnblogs.com/chaiwentao/p/4314878.html
Copyright © 2011-2022 走看看