leetcode 2 两数相加
由低位加到高位一般比较方便,考虑进位问题(通过引入flag和最后的if表达式),两树长度不相等的情况(通过引入三个while循环)
需要变量:pre,cur两个链表节点,记录头结点之前的节点a=new ListNode(-1)
/** * 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* a=new ListNode(-1); ListNode*pre,*cur; pre=a; int flag=0; while(l1&&l2){ int v=l1->val+l2->val+flag; flag=0; if(v>=10){flag=1,v=v%10;} cur=new ListNode(v); pre->next=cur;pre=cur; l1=l1->next,l2=l2->next; } while(l1){ int v=l1->val+flag; flag=0; if(v>=10){flag=1,v=v%10;} cur=new ListNode(v); pre->next=cur;pre=cur; l1=l1->next; } while(l2){ int v=l2->val+flag; flag=0; if(v>=10){flag=1,v=v%10;} cur=new ListNode(v); pre->next=cur;pre=cur; l2=l2->next; } if(flag){ cur=new ListNode(1); pre->next=cur; } return a->next; } };