LeetCode题解——Add Two Numbers
2014-06-02 09:49
375 查看
题目:
两个数字求和,数字用链表表示,每一个结点代表一位。链表顺序与数字顺序相反,即表头存放数字的最低位。
解法:
分别遍历两个链表的每个结点,对两个结点求和即可。要维护一个变量保存每次相加之后的进位。
更常见的,链表顺序与数字顺序相同,那么做一次链表逆序,求和之后再逆序回来即可。
代码:
两个数字求和,数字用链表表示,每一个结点代表一位。链表顺序与数字顺序相反,即表头存放数字的最低位。
解法:
分别遍历两个链表的每个结点,对两个结点求和即可。要维护一个变量保存每次相加之后的进位。
更常见的,链表顺序与数字顺序相同,那么做一次链表逆序,求和之后再逆序回来即可。
代码:
/** * 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 retHead(-1), *pr = &retHead, *p1 = NULL, *p2 = NULL; int carry = 0; //保存每次结点求和之后的进位,用一个bool也可以 for(p1 = l1, p2 = l2; p1 != NULL && p2 != NULL; p1 = p1->next, p2 = p2->next) //p1 p2分别遍历两个链表 { int sum = p1->val + p2->val + carry; pr->next = new ListNode(sum % 10); //求和结果保存在新结点 pr = pr->next; //p2指向求和链表的尾结点 carry = sum / 10; } for(ListNode *p = (p1 == NULL ? p2 : p1); p != NULL; p = p->next) //处理两个链表中未处理完的链表剩余节点 { int sum = p->val + carry; pr->next = new ListNode(sum % 10); pr = pr->next; carry = sum / 10; } if(carry != 0) //如果最后还有进位,必定是1 { pr->next = new ListNode(carry); } return retHead.next; } };
相关文章推荐
- leetcode 题解 2. Add Two Numbers
- 【题解】【链表】【Leetcode】Add Two Numbers
- [LeetCode]题解(python):002-Add Two Numbers
- LeetCode题解 #2 Add Two Numbers
- LeetCode题解 || Add Two Numbers 问题
- LeetCode题解-2-Add Two Numbers
- leetcode 题解 Add Two Numbers(两个单链表求和)
- 题解——Leetcode 2. Add Two Numbers 难度:Medium
- LeetCode题解--2-Add Two Numbers
- [Leetcode题解]002 Add Two Numbers
- leetcode2 Add Two Numbers题解
- LeetCode题解(Golang实现)--Add Two Numbers
- LeetCode题解:2. Add Two Numbers
- LeetCode题解:Add Two Numbers
- LeetCode题解:Add Two Numbers
- leetcode AddTwoNumbers 题解
- LeetCode题解(2)-- Add Two Numbers
- LeetCode题解 —— 2. Add Two Numbers
- LeetCode Add Two Numbers题解
- 2. Add Two Numbers LeetCode题解