2015-05-23 LeetCode 2: Add Two Numbers 个人总结

来源:互联网 发布:大掌柜物流软件 编辑:程序博客网 时间:2024/06/06 19:25

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)

Output: 7 -> 0 -> 8

分析:需要考虑两个链表长度是否一样,如果存在不一样,则需要将对多余长度部分进行处理。

<span style="background-color: rgb(255, 255, 255);"></span><pre name="code" class="cpp" style="color: rgb(51, 51, 51); font-size: 14px; line-height: 30px;"><pre name="code" class="cpp">/** * 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) {        if (l1 == NULL)            return l2;        if (l2 == NULL)            return l1;                    ListNode *sumlist = NULL, *pNode = NULL, *pNext = NULL;//sumlist指向新链表的头指针,pNode在循环中用来指向链表的最后一个节点,pNext指向新添加的节点。        ListNode *p = l1, *q = l2;//为了不破坏指针l1、l2本身的指向,构建临时链表指针        int up = 0;//一定要初始化为0        while (p != NULL && q != NULL) {//l1、l2任意一个链表读取完时结束循环1            pNext = new ListNode(p->val + q->val + up);            up = pNext->val /10;            pNext->val = pNext->val %10;            if (sumlist == NULL)                sumlist = pNode = pNext;            else {                pNode->next = pNext;                pNode = pNext;            }            p = p->next;            q = q->next;        }        while (p != NULL) {//处理l1剩余部分    pNext = new ListNode(p->val + up);            up = pNext->val /10;            pNext->val = pNext->val %10;            pNode->next = pNext;            pNode = pNext;            p = p->next;        }        while (q != NULL) {//处理l2剩余部分            pNext = new ListNode(q->val + up);            up = pNext->val /10;            pNext->val = pNext->val %10;            pNode->next = pNext;            pNode = pNext;            q = q->next;        }        if (up > 0) {最高位进位            pNext = new ListNode(up);            pNode->next = pNext;        }        return sumlist;    }};

错误分析: 1、刚开始未考虑链表长度不一的问题。

2、整型变量up未设初始值,导致循环部分第一句运算结果就有错误,结果随机错误。

3、未掌握new ListNode的用法。

4、链表节点链接是顺序的问题要注意


0 0
原创粉丝点击