/**
* 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 pHead(0); //和的头节点
ListNode *pNode = &pHead; //和的结点
int flage; //进位
while(l1 || l2 || flage){
int temp=0; //每次相加的结果;
if(l1 != NULL) temp += l1->val;
if(l2 != NULL) temp += l2->val;
temp+=flage; //加对应位置的结果
flage = temp/10;
temp %=10;
ListNode *next = l1 ? l1 : l2;
if (next == nullptr) next = new ListNode(temp);
next->val = temp;
pNode->next = next;
pNode = pNode->next;
l1 = l1 ? l1->next : nullptr;
l2 = l2 ? l2->next : nullptr;
}
return pHead.next;
}
};
结果错误,原因是flage没有赋初值……
总结:思路简单,就是直接对应位置相加,然后把进位考虑进去,相加的结果存在新的链表中,但是有很多细节需要考虑。
1、ListNode定义的时候,要不是Listnode结点,要不是*listNode指针。
2、指针类型可以直接=赋值,如ListNode *pNode;pNode=l1;
3、切记给flag以及temp赋初值,否则会根据内存中的数随机给结果。
4、切记定义的指针结点要判断是否为空指针,否则报错。例如
ListNode *next = l1 ? l1 : l2; //为了节省内存,直接利用l1或者l2,只有在最后一个有进位情况下才需要新建结点
if (next == nullptr) next = new ListNode(temp);