Add Two Numbers
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
大数相加,只保留各位,进位加到下一节点。
需注意,判断l1,l2是否为空。若两链表长度不同,需将剩余节点同样作进位处理,若最后剩有进位,需增加新节点。
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { 12 if(l1==NULL) return l2; 13 if(l2==NULL) return l1; 14 ListNode* res=NULL,*pNode=NULL,*pnext=NULL; 15 ListNode* p=l1,*q=l2; 16 int up=0; 17 while(p!=NULL&&q!=NULL) 18 { 19 pnext=new ListNode(p->val+q->val+up); 20 up=pnext->val/10; 21 pnext->val=pnext->val%10; 22 if(res==NULL) 23 res=pNode=pnext; 24 else 25 { 26 pNode->next=pnext; 27 pNode=pnext; 28 } 29 p=p->next; 30 q=q->next; 31 } 32 while(p!=NULL) 33 { 34 pnext=new ListNode(p->val+up); 35 up=pnext->val/10; 36 pnext->val=pnext->val%10; 37 pNode->next=pnext; 38 pNode=pnext; 39 p=p->next; 40 } 41 while(q!=NULL) 42 { 43 pnext=new ListNode(q->val+up); 44 up=pnext->val/10; 45 pnext->val=pnext->val%10; 46 pNode->next=pnext; 47 pNode=pnext; 48 q=q->next; 49 } 50 if(up!=0) 51 { 52 pnext=new ListNode(up); 53 pNode->next=pnext; 54 pNode=pnext; 55 } 56 return res; 57 } 58 };
另一种写法
/** * 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) { int add = 0; ListNode *res = NULL; if(l1==NULL&&l2==NULL) return res; ListNode *p = new ListNode(0); res = p; while(l1!=NULL&&l2!=NULL) { int val = l1->val+l2->val+add; add = 0; p->next=new ListNode(val%10); add=val/10; p=p->next; l1=l1->next; l2=l2->next; } while(l1!=NULL) { int val = l1->val+add; add=0; p->next=new ListNode(val%10); add=val/10; p=p->next; l1=l1->next; } while(l2!=NULL) { int val = l2->val+add; add=0; p->next=new ListNode(val%10); add=val/10; p=p->next; l2=l2->next; } if(add!=0) { p->next=new ListNode(add); } return res->next; } };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了