主要考察链表知识,解法如下:
/**
* 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* header;
ListNode* p;
ListNode* ll1 = l1;
ListNode* ll2 = l2;
int lengthL1 = 0, lengthL2 = 0;
while (ll1 != NULL)
{
lengthL1++; ll1 = ll1->next;
}
while (ll2 != NULL)
{
lengthL2++; ll2 = ll2->next;
}
if (lengthL1 > lengthL2)
{
header = l1;
p = l1;
}
else
{
header = l2;
p = l2;
}
while (l1 != NULL && l2!=NULL)
{
int value1 = l1->val;
int value2 = l2->val;
int resultValue = value1 + value2;
if (resultValue >= 10)
{
if (p->next == NULL)
{
ListNode* tail = (ListNode*)malloc(sizeof(ListNode));
tail->next = p->next;
p->next = tail;
p->next->val += resultValue / 10;
p->val = resultValue % 10;
}
else
{
p->next->val += resultValue / 10;
p->val = resultValue % 10;
}
}
else
{
p->val = resultValue;
}
l1 = l1->next;
l2 = l2->next;
p = p->next;
}
while (p != NULL)
{
if (p->val >= 10)
{
if (p->next == NULL) /*************创立新节点以容纳最高位上的进位******/
{
ListNode* tail = (ListNode*)malloc(sizeof(ListNode));
tail->next = p->next;
p->next = tail;
tail->val = p->val / 10;
}
else
{
p->next->val += p->val / 10;
}
p->val = p->val % 10;
}
p = p->next;
}
return header;
}
};
本文详细介绍了如何使用链表来实现两个数的相加操作,包括处理不同长度链表的加法运算,解决进位问题,并给出了一段完整的C++实现代码。
805

被折叠的 条评论
为什么被折叠?



