东莞定制建站网站推广公司,前程无忧网宁波网站建设类岗位,做网站读哪个专业,域名没有网站可以备案Problem: 2. 两数相加 文章目录 思路解题方法Code一些感想 思路
主要是一一相加和逆序的方式存储 先说逆序储存#xff0c;看下图 我们先声明出指针p和指针q#xff0c;还有指针head#xff08;主要用于return上而已#xff09;#xff0c;然后进行一系列操作#xff0c… Problem: 2. 两数相加 文章目录 思路解题方法Code一些感想 思路
主要是一一相加和逆序的方式存储 先说逆序储存看下图 我们先声明出指针p和指针q还有指针head主要用于return上而已然后进行一系列操作之后p q之后的操作就是对q进行至于p只做一个动作p q int flag 0;struct ListNode *p NULL, *q NULL, *head NULL;while(l1 ! NULL l2 ! NULL) {if(flag 0) {flag 1;p (struct ListNode*)malloc(sizeof(struct ListNode));p-next NULL;head p;} else {q (struct ListNode*)malloc(sizeof(struct ListNode));q-next NULL;p-next q;p q;}l1 l1-next;l2 l2-next;}至于相加嘛好说将对应的两个数加起来然后检查是否大于9如果是则要保留个位并进一位也就是将十位数的部分放入下一个相加的过程中以指针p的部分为例——指针q的部分也一样。
p-val l1-val l2-val;
if(p-val 9) {last p-val / 10;p-val % 10;
} else last 0;但是要知道l1与l2终会到达null所以对于剩余的部分也只是解决前面的“进一位”遗留的问题而已. while(l1 ! NULL) {q (struct ListNode*)malloc(sizeof(struct ListNode));q-val l1-val last;if(q-val 9) {last q-val / 10;q-val % 10;} else last 0;q-next NULL;p-next q;p q;l1 l1-next;}while(l2 ! NULL) {q (struct ListNode*)malloc(sizeof(struct ListNode));q-val l2-val last;if(q-val 9) {last q-val / 10;q-val % 10;} else last 0;q-next NULL;p-next q;p q;l2 l2-next;}到最后倘若还存在进一位就得要再建一个节点。 if(last 0) {q (struct ListNode*)malloc(sizeof(struct ListNode));q-val last;if(q-val 9) {last q-val / 10;q-val % 10;} else last 0;q-next NULL;p-next q;p q;}解题方法
由思路可知
Code
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {struct ListNode *p NULL, *q NULL, *head NULL;int flag 0, last;while(l1 ! NULL l2 ! NULL) {if(flag 0) {flag 1;p (struct ListNode*)malloc(sizeof(struct ListNode));p-val l1-val l2-val;if(p-val 9) {last p-val / 10;p-val % 10;} else last 0;p-next NULL;head p;} else {q (struct ListNode*)malloc(sizeof(struct ListNode));q-val l1-val l2-val last;if(q-val 9) {last q-val / 10;q-val % 10;} else last 0;q-next NULL;p-next q;p q;}l1 l1-next;l2 l2-next;}while(l1 ! NULL) {q (struct ListNode*)malloc(sizeof(struct ListNode));q-val l1-val last;if(q-val 9) {last q-val / 10;q-val % 10;} else last 0;q-next NULL;p-next q;p q;l1 l1-next;}while(l2 ! NULL) {q (struct ListNode*)malloc(sizeof(struct ListNode));q-val l2-val last;if(q-val 9) {last q-val / 10;q-val % 10;} else last 0;q-next NULL;p-next q;p q;l2 l2-next;}if(last 0) {q (struct ListNode*)malloc(sizeof(struct ListNode));q-val last;if(q-val 9) {last q-val / 10;q-val % 10;} else last 0;q-next NULL;p-next q;p q;}return head;
}一些感想
其实当时在解决这道题的时候碰到过这样的问题
Line 70: Char 15: runtime error: member access within misaligned address 0xbebebebebebebebe for type struct ListNode, which requires 8 byte alignment [ListNode.c]0xbebebebebebebebe: note: pointer points herememory cannot be printed后来在我看了AuthurLEE的文章之后我才知道原来是忘记在初始化的时候让指针指向NULL了包括head指针还有结构体里面的next