算法分析与设计——LeetCode:2.Add Two Numbers
2017-09-11 18:57
344 查看
题目
You are given two non-empty linked lists representing two non-negative integers. 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.You may assume the two numbers do not contain any leading zero, except the number 0 itself.
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) { };
思路
每个链表都表示一个多位数,每个节点里的val是该位的数字,头节点是个位,我们要将其每一位相加和进位。一开始我试图将两个链表的整数分别读取出来并相加,但是发现当数字位数特别多时会超出int和long long int的范围,所以只能老实从头节点开始,每一位分别进行相加和进位,并将结果连接成一个新链表。如下代码,用n来进位,当相加结果为两位数,n赋值为1。代码
/** * 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 *p1, *head, *p2, *p; int n = 0; p1 = l1; p2 = l2; head = new ListNode(0); p = head; while (p1 != NULL || p2 != NULL || n != 0) { if (p1 != NULL) { n += p1->val; p1 = p1->next; } if (p2 != NULL) { n += p2->val; p2 = p2->next; } p->next = new ListNode(n%10); p = p->next; if (n >= 10) { n = 1; } else { n = 0; } } return head->next; } };
相关文章推荐
- 算法分析与设计——leetcode刷题之Add Two Numbers(Medium)
- 算法设计与分析 HW6:LeetCode 54
- 算法分析与设计——LeetCode Problem.35 Search Insert Position
- 算法分析与设计——LeetCode:5. Longest Palindromic Substring
- 算法分析与设计课程(14):【leetcode】 Maximal Square
- 算法分析与设计丨第二周丨LeetCode(4)——Maximum Subarray(Easy)
- 算法分析与设计——LeetCode:3. Longest Substring Without Repeating Characters
- 算法分析与设计课程(11):【leetcode】Gray Code
- [算法分析与设计] leetcode 每周一题: 80. Remove Duplicates from Sorted Array II
- [算法分析与设计] leetcode 每周一题: UTF-8 Validation
- 算法分析与设计课程——LeetCode刷题之Remove Duplicates from Sorted Array
- 算法分析与设计——LeetCode Problem.653 Two Sum IV - Input is a BST
- 算法分析与设计课程(16):【leetcode】 Integer to Roman
- 算法分析与设计丨第六周丨LeetCode(9)——Course Schedule(Medium)
- [算法分析与设计] leetcode 每周一题: 420. Strong Password Checker
- [算法分析与设计] leetcode 每周一题: 542. 01 Matrix
- [算法分析与设计] leetcode 每周一题: 335. Self Crossing
- [算法分析与设计] leetcode 每周一题: 078. Subsets
- [算法分析与设计] leetcode 每周一题: 494. Target Sum
- [算法分析与设计] leetcode 每周一题: Surrounded Regions