LeetCode第2题题目:
Total Accepted: 111272
Total Submissions: 512942
Difficulty: Medium
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
题目的大概意思是:一个整数如342,在链表中存放形式是倒着的(即:2->4->3),再如465,在链表中的存放形式是:5->6->4。将这两个数相加得807,存放到链表中表现为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) {
ListNode *p = l1, *q = l2;
ListNode *r = (ListNode *)malloc(sizeof(ListNode));
ListNode *s = r;
int shi_val = 0;
while(p && q){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = (p->val + q->val + shi_val) % 10;
shi_val = (p->val + q->val + shi_val) / 10;
s->next = t;
s = t;
p = p->next;
q = q->next;
}
while(p){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = (p->val + shi_val) % 10;
shi_val = (p->val + shi_val) / 10;
s->next = t;
s = t;
p = p->next;
}
while(q){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = (q->val + shi_val) % 10;
shi_val = (q->val + shi_val) / 10;
s->next = t;
s = t;
q = q->next;
}
if(shi_val){
ListNode *t = (ListNode *)malloc(sizeof(ListNode));
t->val = shi_val;
s->next = t;
s = t;
}
s->next = NULL;
return r->next;
}
};
提交代码后,顺利AC掉。
run time
为40ms。