红桃J

用心写好每行完美的代码,远比写一堆更有价值

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

这个题目没有什么特点,但我好像写的不是很好,仍有一些空间时间上的浪费。不过在这里记下来一些我和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;
}

 

posted on 2015-03-05 09:27  红桃J  阅读(158)  评论(0编辑  收藏  举报