LeetCode 2. Add Two Numbers

来源:互联网 发布:51电子单片机原理图 编辑:程序博客网 时间:2024/06/07 05:18

描述

给出两个数,分别是用链表存储,求两个数之和。

解决

把这个题目当成数组来思考即可。当一个链表为空的时候,就需要new一个存储空间进行连接,注意进位的判断。

/** * 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) {        int t1 = 0, t2 = 0;        ListNode *h1 = l1, *h2 = l2;        int c = 0;        bool flag = false;        while (l1 != NULL && l2 != NULL){            t1 = l1 -> val;            t2 = l2 -> val;            if (t1 + t2 >= 10){                t1 = t2 = t1 + t2 - 10;                l1 -> val = t1;                l2 -> val = t2;                if (l1 -> next == NULL && l2 -> next == NULL){                    ListNode* ptr = new ListNode(0);                    l1 -> next = ptr;                    ptr -> val += 1;                }else if (l1 -> next != NULL){                    l1 -> next -> val += 1;                }else if (l2 -> next != NULL){                    l2 -> next -> val += 1;                }            }else{                l1 -> val = t1 + t2;                l2 -> val = t1 + t2;            }            l1 = l1 -> next;            l2 = l2 -> next;        }       if (l1 != NULL){         while (l1 != NULL){             if (l1 -> val >= 10 && l1 -> next != NULL){                 l1 -> val -= 10;                 l1 -> next -> val += 1;             }else if (l1 -> val >= 10 && l1 -> next == NULL){                 l1 -> next = new ListNode(1);                 l1 -> val -= 10;             }             l1 = l1 -> next;         }         return h1;       }         else if (l2 != NULL){            while (l2 != NULL){                if (l2 -> val >= 10 && l2 -> next != NULL){                     l2 -> val -= 10;                    l2 -> next -> val += 1;             }else if (l2 -> val >= 10 && l2 -> next == NULL){                    l2 -> next = new ListNode(1);                    l2 -> val -= 10;             }             l2 = l2 -> next;            }        }        return h2;    }};
0 0