个人思路总结:
1、从题目中可以看出会给你两个单链表,然后把他们对应的每个节点的元素相加,若有进位,则向下一个节点进位。
2、我们可以建立一个新链表,把两个链表相加的结果放到新链表上。对两个单链表每次均取下一个节点,然后取出它们的value相加,并且判断是否有进位。如果某个链表已经遍历完,而另一个链表还没有遍历完,则把该链表直接放到结果链表的后面。
注意对于临时节点的建立,因为每次节点都需要向后走,如果不建立临时节点,那么最后的结果链表的表头并不处于表头位置。即下面代码的result和tmp的关系。
代码如下:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
ListNode *result = new ListNode(0);
ListNode *tmp = result;
int sum=0;
while(l1||l2)
{
if(l1)
{
sum +=l1->val;
l1 = l1->next;
}
if(l2)
{
sum += l2->val;
l2=l2->next;
}
tmp->next = new ListNode(sum%10);
sum/=10;
tmp=tmp->next;
}
if(sum)
tmp->next = new ListNode(1);
return result->next;
}
};