Leetcode题目总结[2]两数相加

1.题目描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例 1:

 

输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] 解释:342 + 465 = 807.

示例 2:

输入:l1 = [0], l2 = [0] 输出:[0]

示例 3:

输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]

 

提示:

  • 每个链表中的节点数在范围 [1, 100] 内
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零

2.代码

C语言:

复制代码
1 /* 2 * @lc app=leetcode.cn id=2 lang=c 3 * 4 * [2] 两数相加 5 */ 6 7 // @lc code=start 8 /** 9 * Definition for singly-linked list. 10 * struct ListNode { 11 * int val; 12 * struct ListNode *next; 13 * }; 14 */ 15 /*#include<stdio.h> 16 struct ListNode { 17 int val; 18 struct ListNode *next; 19 };*/ 20 struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){ 21 struct ListNode* p1=l1;//p1指向l1 22 struct ListNode* p2=l2;//p2指向l2 23 struct ListNode* result = (struct ListNode *)malloc(sizeof(struct ListNode)); 24 struct ListNode* p3 = result; 25 p3 -> val = 0; 26 p3 -> next = NULL;//az 第二个测试点缺这一句 27 int temp = 0; 28 do 29 { 30 //printf("%d %d %d\n",p1 -> val,p2 -> val,p3 ->val); 31 if(p1 != NULL && p2 != NULL) 32 { 33 //printf("1\n"); 34 p3 -> val += (p1 -> val + p2 ->val) + temp; 35 temp = p3 -> val / 10; 36 p3 -> val %= 10; 37 if(p1 -> next != NULL) p1 = p1 -> next; 38 else p1 = NULL; 39 if(p2 -> next != NULL) p2 = p2 -> next; 40 else p2 = NULL; 41 if(temp != 0 || p1 || p2) 42 { 43 p3 -> next = (struct ListNode *)malloc(sizeof(struct ListNode)); 44 45 p3 = p3 -> next; 46 p3 -> next = NULL; 47 p3 -> val = 0; 48 } 49 50 } 51 else if(p1 == NULL) 52 { 53 p3 -> val += temp + p2 ->val; 54 p2 = p2 -> next; 55 temp = p3 -> val / 10; 56 p3 -> val %= 10; 57 if(temp != 0 || p2 != NULL) 58 { 59 p3 -> next = (struct ListNode *)malloc(sizeof(struct ListNode)); 60 61 p3 = p3 -> next; 62 p3 -> next = NULL; 63 p3 -> val = 0; 64 } 65 66 } 67 else if(p2 == NULL) 68 { 69 p3 -> val += p1 -> val + temp; 70 p1 = p1 -> next; 71 temp = p3 -> val / 10; 72 p3 -> val %= 10; 73 if(temp != 0 || p1 != NULL) 74 { 75 p3 -> next = (struct ListNode *)malloc(sizeof(struct ListNode)); 76 77 p3 = p3 -> next; 78 p3 -> next = NULL; 79 p3 -> val = 0; 80 } 81 82 83 } 84 85 86 87 88 }while(p1 || p2); 89 if(temp != 0 && p3) 90 { 91 p3 -> val += temp; 92 } 93 return result; 94 95 } 96 // @lc code=end
复制代码

简单链表应用

 3.做题在遇到的错误

中间遇到过几个错误,出错代码当时忘了记 只记得错误提示了

runtime error: member access within null pointer of type 'struct ListNode'

 

runtime error: member access within misaligned address 0xbebebebebebebebe for type 'struct ListNode'

这个错误是因为在定义指针后,由于结构体中存在next指针,申请结构体空间的时候定义了next指针,而这个next指针未指向任何空间

第二个测试点 0 + 0 = 0 不过就是缺一句p -> next = NULL;

 

 

__EOF__

本文作者cheng_zhi
本文链接https://www.cnblogs.com/chengzhid/p/15210193.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   cheng_zhi  阅读(285)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示