给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
逆序表明不用对链表倒置,否则要进行进一步处理
#include<iostream>
#include<vector>
using namespace std;
/**
* Definition for singly-linked list.
*/
struct ListNode {
int val;
ListNode *next;
//初始化
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* list1, ListNode* list2) {
ListNode *p=list1,*q=list2;
ListNode *r=(ListNode*)malloc(sizeof(ListNode));
ListNode *s=r;
int is_val=0;
while (p&&q)
{
ListNode *t=(ListNode*)malloc(sizeof(ListNode));
t->val=(p->val+q->val+is_val)%10;
is_val=(p->val+q->val+is_val)/10;
//s里面存储的就是相加之后的数值
s->next=t;
s=t;
p=p->next;
q=q->next;
}
while (p)
{
ListNode *t=(ListNode*)malloc(sizeof(ListNode));
t->val=(p->val+is_val)%10;
is_val=(p->val+is_val)/10;
s->next=t;
s=t;
p=p->next;
}
while (q)
{
ListNode* t=(ListNode*)malloc(sizeof(ListNode));
t->val=(q->val+is_val)%10;
is_val=(q->val+is_val)/10;
s->next=t;
s=t;
q=q->next;
}
if(is_val){
ListNode *t=(ListNode*)malloc(sizeof(ListNode));
t->val=is_val;
s->next=t;
s=t;
}
s->next=NULL;
//返回的就是头指针,输出的时候就是输出里面的所有的元素
return r->next;
}
};
没写main函数了。。