前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >2. 两数相加(力扣)

2. 两数相加(力扣)

作者头像
杨鹏伟
发布2021-04-25 15:00:21
发布2021-04-25 15:00:21
34100
代码可运行
举报
文章被收录于专栏:ypwypw
运行总次数:0
代码可运行

参考官方题解

代码语言:javascript
代码运行次数:0
复制
//题意:给两个链表,每个链表表示的是倒序输入的两个数,例如[1,2,3] [1,2,3]。然后要求求出
//两个链表的和并且以链表的方式返回。例如[2,4,6];表示123 + 123 = 246; 

//思路:跟归并排序的思路一致,依次将对应位置的数字相加,然后注意进位。直到一个链表的元素循环完毕,
//然后就将后面的都加到新的链表的尾部就行了。 


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    ListNode *head = nullptr,*tail = nullptr;//头指针跟尾指针都置为0 

	int jinwei = 0;//用来记录每次的进位。 
	
	while(l1||l2){//当两个链表都为空就跳出循环,否则把长的链表的后续全部赋值到新链表的尾部 
		int n1 = l1 ? l1->val:0;//如果指向不为空就拿出当前值,否则就置为0 
		int n2 = l2 ? l2->val:0;
		
		int sum = n1+n2+jinwei;//当前的数字和 
		
		if(!head){
			head = tail = new ListNode(sum % 10); 
		}
		else{//表示头结点 
			tail->next = new ListNode(sum%10);
			tail = tail->next;
		}
		jinwei = sum / 10;
		if(l1){
			l1 = l1->next;
		}
		if(l2){
			l2 = l2->next;
		}
	}
	    if(jinwei > 0){
	    	tail->next = new ListNode(jinwei);
		}
		return head;
	    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/04/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档