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;

}

 

你可能感兴趣的:(LeetCode)