第十五周(Add Two Numbers)
目录:
- 本周完成题目
- 主要过程思路
- 相关代码
一、本周完成题目
本周共完成1道题目,1道Medium。
具体完成题目及难度如下表:
# | Title | Difficulty |
---|---|---|
2 | Add Two Numbers | Medium |
题目内容
1、Add Two Numbers
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
题目大意:有两个存储从个位开始数字的链表,将这两个数字相加,求相加后的新链表。
二、主要过程思路
1、Add Two Numbers:
本周从头开始随便选了一道问题。这道题相对而言思路很简单。同时对两个链表进行遍历,对应位置相加,需要考虑进位的情况。当一个链表访问完毕,则将剩下的链表单独访问(需要考虑进位)。最后全部访问完成之后,判断一下进位,如果进位有数字则增加一个结点存储1。
总体来说题目比较简单,但是需要考虑链表的插入访问操作。注意链表结点的初始化问题。
三、相关代码
Add Two Numbers
/**
* 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 start(-1);
ListNode *p=&start;
int up=0;
while(l1!=NULL&&l2!=NULL){
int sum=l1->val+l2->val+up;
p->next=new ListNode(sum%10);
up=sum/10;
p=p->next;
l1=l1->next;
l2=l2->next;
}
for(ListNode *pt=(l1==NULL?l2:l1);pt!=NULL;pt=pt->next){
int sum=up+pt->val;
p->next=new ListNode(sum%10);
up=sum/10;
p=p->next;
}
if(up!=0){
p->next=new ListNode(1);
}
return start.next;
}
};