给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 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
- 题目数据保证列表表示的数字不含前导零
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;