除了做做ACM的题,也会没事刷刷leetcode的题感受一下 这里主要是对比自己的写法与其他人更好的写法之间的差异 后面有可能会尝试其他语言来完成题目?
题目意思清晰直白 只存储某位的链表逆序相加得到新链表
写的时候才会考虑到很多细节问题 进位是最容易想到的问题 还有两个链表长度不一致的问题 以及最后提交才发现的可能存在单纯由于进位导致长度增加的问题
刷leetcode感觉就是算法层面的并不是特别复杂 工业应用的也往往是这种简单的逻辑 但要考虑到种种细节…细桀(
代码如下
++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { bool over=false; ListNode *res=NULL,*cur=NULL; if((l1->val+l2->val)>=10){ over=true; } cur=res=new ListNode((l1->val+l2->val)%10); l1=l1->next,l2=l2->next; while(l1!=NULL&&l2!=NULL){ int addtemp=l1->val+l2->val+over; ListNode *tmp=new ListNode(addtemp%10); if(addtemp>=10){ over=true; } else{ over=false; } cur->next=tmp; cur=tmp; l1=l1->next; l2=l2->next; } ListNode *left=(l1==NULL)?l2:l1; while(left!=NULL) { int addtemp=left->val+over; ListNode *tmp=new ListNode(addtemp%10); if(addtemp>=10) { over=true; }else{ over=false; } cur->next=tmp; cur=tmp; left=left->next; } if(over) { ListNode *tmp=new ListNode(1); cur->next=tmp; } return res; } };
|