leetcode 两数相加
2018-10-13 12:09
295 查看
给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807
[code]/** * 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 = (ListNode*)malloc(sizeof(ListNode)); ListNode *t,*h; head->next = NULL; h = head; //指向头结点 int carry = 0; //进位标记 head->val = l1->val + l2->val; if(head->val >= 10){ carry = 1; head->val -= 10; } h = head; if(l1!=NULL) l1 = l1->next; if(l2!=NULL) l2 = l2->next; while(l1!=NULL || l2!=NULL){ t = (ListNode*)malloc(sizeof(ListNode)); if(l1!=NULL && l2!=NULL){ t->val = l1->val + l2->val; } else if(l1 == NULL){ t->val = l2->val; } else if(l2 == NULL){ t->val = l1->val; } t->next = NULL; if(carry==1){ carry = 0; t->val++; } if(t->val>=10){ carry = 1; t->val -= 10; } h->next = t; h = h->next; if(l1!=NULL) l1 = l1->next; if(l2!=NULL) l2 = l2->next; } //考虑进位,如果有进位的话还要加一个结点 if(carry == 1){ t = (ListNode*)malloc(sizeof(ListNode)); t->val = carry; t->next = NULL; h->next = t; } return head; } };
阅读更多
相关文章推荐
- LeetCode 02. 两数相加(链表) 03.最大不重复的字符串
- LeetCode 2. 两数相加
- LeetCode - 66/67 - 两数相加加法模拟
- 刷LeetCode(1)——两数相加
- [LeetCode]371.Sum of Two Integers两数相加
- LeetCode 2. Add Two Numbers(两数相加)
- LeetCode - 两数相加
- 从零打卡leetcode之day 2---两数相加
- Leetcode 第二题,两数链表相加
- 【LeetCode】- Two Sum(两数相加)
- Leetcode002--单链表两数相加
- [leetcode]两数相加
- 链表:链表两数相加( LeetCode 2. Add Two Numbers(两数相加))
- LeetCode刷题记: 两数相加
- Leetcode 653. Two Sum IV - Input is a BST 两数相加4 解题报告
- [LeetCode] 2. Add Two Numbers 两数相加 @python
- leetcode-2-两数相加(add two numbers)-java
- leetcode算法题:两数相加(Java实现-效率超过100%提交者)