[LeetCode] Add Two Numbers

来源:互联网 发布:模拟约瑟夫环 java 编辑:程序博客网 时间:2024/06/17 01:35

题目:

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

思路:题目还是挺简单,理解起来也比较容易,就是将两个链表加起来,解法也有很多种,比如可以将链表翻译成数字,相加后再转换成链表,在这里直接将链表想加,需要十分注意边界条件就可以,另外进位carry也需要特别注意,尤其是当最高位仍需要进位时,需要额外增加一个节点。

代码:

/** * 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 head(-1);        ListNode *pr = &head, *p=l1, *q=l2;        int carry = 0,sum=0;        for(;p!=NULL||q!=NULL;)        {            if(p!=NULL && q!=NULL)            {                sum = p->val + q->val + carry;                p = p->next;                q = q->next;            }            else if(p==NULL)            {                sum = q->val + carry;                q = q->next;            }            else            {                sum = p->val + carry;                p = p->next;            }            pr->next = new ListNode(sum%10);            carry = sum/10;            pr = pr->next;        }        if(carry)            pr->next = new ListNode(carry);        return head.next;    }};


1 0