栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

力扣(leetcode)两数之和中使用链表的一些感悟,基于C语言的

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

力扣(leetcode)两数之和中使用链表的一些感悟,基于C语言的

struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode *head = NULL,*tail = NULL;
int carry = 0;
while (l1 || l2){ //这里的l1和l2在开始的时候是值链表的首地址但是在后面就变成next中的内容,
// 所以,最后链表next里是NULL,就可以通过这个判断是否遍历完整个链表。
int n1 = l1 ? l1->val : 0;
int n2 = l2 ? l2->val : 0;
int sum = n1 + n2 + carry;
if(!head){
//这里给了head和tail,他们在开始时候都是相同的地址,而head作为链表的头指针是不能动的,所以
//tail就是可以移动的临时指针,用来遍历链表用的。
head = tail = malloc(sizeof(struct ListNode));
tail->val = sum % 10;
tail->next = NULL;
} 
else{
tail->next = malloc(sizeof(struct ListNode));
tail->next->val = sum % 10;
tail = tail->next;//这里更新了tail的值就是将新的节点的指针传递给临时指针tail
tail->next = NULL;
}
carry = sum /10;
if(l1){
l1 = l1->next;//跳转到下一个节点

}
if(l2){
l2 = l2->next;


}
}
if(carry > 0){
tail->next = malloc(sizeof(struct ListNode));//给进位安排一个新的节点来存储进位
tail->next->val = carry;
tail->next->next = NULL;



}



return head;


}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/846759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号