LeetCode OJ : 2 Add Two Numbers

来源:互联网 发布:阿里云 地区选择 编辑:程序博客网 时间:2024/06/15 20:49

Add Two Numbers

Total Accepted: 103820 Total Submissions: 487934 Difficulty: Medium


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

/** * 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 *ListSum = NULL, *pNode = NULL, *tail = NULL;        ListNode *pl1 = l1, *pl2 = l2;        int sum, cnt = 0;                while(pl1 != NULL || pl2 != NULL){            if(pl1 == NULL) {                   //此时是因为链表pl2比较长                sum = cnt + pl2->val;            }            else if(pl2 == NULL){               //此时是因为链表pl1比较长                sum = cnt + pl1->val;            }            else if(pl1 != NULL && pl2 != NULL){                sum = cnt + pl1->val + pl2->val;            }                        cnt = 0;            if(sum >= 10){                cnt = 1;                sum -= 10;            }                        pNode = new struct ListNode(sum);            if(ListSum == NULL){                ListSum = pNode;                tail = pNode;            }            else{                tail->next = pNode;                tail = pNode;            }                        if(pl1 != NULL)pl1 = pl1->next;            if(pl2 != NULL)pl2 = pl2->next;        }                if(cnt == 1){                           //考虑到最高位的两位进位             sum = cnt;             pNode = new struct ListNode(sum);             if(ListSum == NULL){                ListSum = pNode;                tail = pNode;             }             else{                tail->next = pNode;                tail = pNode;             }        }                return ListSum;    }};


如果将结果存放在其中一个比较长的链表上面,效率应该会更高一些;

写了一半,懒得写了,大概思路就是:首先获得两个链表的长度,通过比较两个链表的长度,来分情况;

如果最高位还是有进位的话,就动态分配一个结点来保存进位1;

改天有时间再试试;

0 0
原创粉丝点击