2. Add Two Numbers

来源:互联网 发布:睿博数据技术有限公司 编辑:程序博客网 时间:2024/05/18 00:37

题目:

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


题目分析:

1、看题目第一感觉,这难道不就是加法运算吗?为什么是Medium,好吧,自己给自己心理安慰。

2、边界情况,万一有为空的呢。

2、倒序的方法挺简单的,适合从低位开始运算,注意进位就可以。而且只要不是两个链表都到尾节点就一直向后。


思路:

1、两个指针分别指向两个链表,向后依次同时移动一位

2、注意进位,我采用了一个标识符,用来获取是否上一次运算存在进位

3、我的最后一位的处理方式与其他人不一样,单独处理


代码:

/** * 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 == nullptr)  return l2;        if (l2 == nullptr)  return l1;        int flag = 0, val;        ListNode* head = new ListNode(0);        ListNode* phead = head;        while (l1 != nullptr || l2 != nullptr)        {            ListNode* p = new ListNode(0);            head->next = p;            head = p;            val = (l1 != nullptr ? l1->val : 0) + (l2 != nullptr ? l2->val : 0) + flag;            val >= 10 ? val = val % 10, flag = 1 : flag = 0;            head->val = val;            l1 = (l1 == nullptr) ? l1 : l1->next;            l2 = (l2 == nullptr) ? l2 : l2->next;        }        if (flag == 1)        {            ListNode* p = new ListNode(1);            head->next = p;        }        return phead->next;    }};


0 0
原创粉丝点击