leetcode2 Add Two Numbers

来源:互联网 发布:windows ant 编辑:程序博客网 时间:2024/05/29 14:29

主要考察链表知识,解法如下:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public:    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {    ListNode* header;    ListNode* p;    ListNode* ll1 = l1;    ListNode* ll2 = l2;    int lengthL1 = 0, lengthL2 = 0;    while (ll1 != NULL)    {        lengthL1++; ll1 = ll1->next;    }    while (ll2 != NULL)    {        lengthL2++; ll2 = ll2->next;    }    if (lengthL1 > lengthL2)    {        header = l1;        p = l1;    }    else    {        header = l2;        p = l2;    }    while (l1 != NULL && l2!=NULL)    {        int value1 = l1->val;        int value2 = l2->val;        int resultValue = value1 + value2;        if (resultValue >= 10)        {            if (p->next == NULL)            {                ListNode* tail = (ListNode*)malloc(sizeof(ListNode));                tail->next = p->next;                p->next = tail;                p->next->val += resultValue / 10;                p->val = resultValue % 10;            }            else            {                p->next->val += resultValue / 10;                p->val = resultValue % 10;            }        }        else        {            p->val = resultValue;        }        l1 = l1->next;        l2 = l2->next;        p = p->next;    }    while (p != NULL)    {        if (p->val >= 10)        {            if (p->next == NULL)  /*************创立新节点以容纳最高位上的进位******/            {                ListNode* tail = (ListNode*)malloc(sizeof(ListNode));                tail->next = p->next;                p->next = tail;                tail->val = p->val / 10;            }            else            {                p->next->val += p->val / 10;            }            p->val = p->val % 10;        }        p = p->next;    }    return header;    }};
0 0
原创粉丝点击