题目:
给两个单链表代表两个非负数字,每个数字都是逆序存储,并且单链表每个节点存储一个数(0-9),将这两个数相加,返回一个链表
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
分析:
遍历两个链表,从链表中分别取出数字,相加,如果大于等于10则进一位,十位数也是,如果十位数也大于等于10则十位数上也要进一位。如果链表长度不等,则剩下的链表与进位相加存储。如果链表长度相等还要考虑最高位是否有进位
代码:
/**
* 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 *ret, *s, *p, *t, *q;
ret = (ListNode *)malloc(sizeof(ListNode));
ret->next = NULL;
p = ret;
t = l1;
q = l2;
int temp = 0, up = 0, real = 0;
while(t != NULL && q != NULL){
temp = t->val + q->val + up;
if(temp < 10){
real = temp;
up = 0;
}else{
real = temp%10;
up = 1;
}
s = (ListNode *)malloc(sizeof(ListNode));
s->val = real;
s->next = NULL;
p->next = s;
p = s;
t = t->next;
q = q->next;
}
while(t != NULL){
s = (ListNode *)malloc(sizeof(ListNode));
temp = t->val + up;
if(temp < 10){
real = temp;
up = 0;
}else{
real = temp%10;
up = 1;
}
s->val = real;
s->next = NULL;
p->next = s;
p = s;
t = t->next;
}
while(q != NULL){
s = (ListNode *)malloc(sizeof(ListNode));
temp = q->val + up;
if(temp < 10){
real = temp;
up = 0;
}else{
real = temp%10;
up = 1;
}
s->val = real;
s->next = NULL;
p->next = s;
p = s;
q = q->next;
}
if(t == NULL && q == NULL && up == 1){
s = (ListNode *)malloc(sizeof(ListNode));
s->val = up;
s->next = NULL;
p->next = s;
p = s;
}
return ret->next;
}
};