<题目描述>
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储 一位 数字。
<原题链接>
https://leetcode-cn.com/problems/add-two-numbers/
<理明思路>
略
<样例代码>
//C++
#include<iostream>
#include<stack>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) :val(x), next(NULL) {}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *p1 = l1, *p2 = l2, *p3;
ListNode *h_ans = CreatNode(len(l1) > len(l2) ? len(l1) + 1 : len(l2) + 1);
int x, y, carry = 0;
int ans;
p3 = h_ans;
while (p1 != NULL || p2 != NULL)
{
if (p1 == NULL) x = 0;
else
{
x = p1->val;
p1 = p1->next;
}
if (p2 == NULL) y = 0;
else
{
y = p2->val;
p2 = p2->next;
}
ans = (x + y + carry) % 10;
p3->val = ans;
p3 = p3->next;
carry = (x + y + carry) > 9 ? 1 : 0;
}
if (carry != 0)
p3->val = carry;
Standard(h_ans);
return h_ans;
}
/***/void showAns(ListNode *answer);
ListNode* CreatNode(int node_size)
{//creat a new node with node_size
ListNode *head = NULL, *p, *q = NULL;
for (int i = 0; i < node_size; i++)
{
p = new ListNode(0);
p->next = NULL;
if (head == NULL) head = p;
if (q == NULL) q = p;
else
{
q->next = p;
q = p;
}
}
return head;
}
private:
int len(ListNode* l)
{//get length of the node
ListNode *p = l;
int _count = 0;
while (p != NULL)
{
_count++;
p = p->next;
}
return _count;
}
void Standard(ListNode *l)
{//delete exp 0
ListNode *zero = l, *p = l;
while (p != NULL)
{
if (p->val != 0)
zero = p;
p = p->next;
}
p = zero->next;
zero->next = NULL;
while (p != NULL)
{
zero = p->next;
delete p;
p = zero;
}
}
};