两数相加–伪头节点
创建伪头节点,数学加法运算。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
if (l1 == NULL && l2 != NULL){
return l2; }
if (l1 != NULL && l2 == NULL){
return l1; }
if (l1 == NULL && l2 == NULL){
return NULL; }
ListNode *dummy_head = new ListNode(-1);
ListNode *pre = dummy_head;
while (l1 != NULL && l2 != NULL)
{
if (l1->val + l2->val < 10)
{
l1->val = l1->val + l2->val;
}
else
{
l1->val = (l1->val + l2->val) - 10;
if (l1->next != NULL && l2 -> next != NULL)
{
l1->next->val = l1->next->val + 1;
}
else
{
if (l1->next == NULL && l2 -> next != NULL)
{
l1->next = new ListNode(1);
}
else if (l1->next != NULL && l2 -> next == NULL)
{
l2->next = new ListNode(1);
}
else
{
l1->next = new ListNode(1);
}
}
}
pre->next = l1;
pre = pre->next;
l1 = l1->next;
l2 = l2->next;
}
ListNode *p = dummy_head;
dummy_head = dummy_head->next;
delete p;
if (l1 != NULL && l2 == NULL)
{
pre->next = l1;
return dummy_head;
}
else if (l1 == NULL && l2 != NULL)
{
pre->next = l2;
return dummy_head;
}
else
{
return dummy_head;
}
}
};