网站焦点图素材,百度云资源链接分享群组,苏州新海通网站建设,中企动力建站怎么样题目描述
给你两个 非空 的链表#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的#xff0c;并且每个节点只能存储 一位 数字。
请你将两个数相加#xff0c;并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外#xff0c;这两个数都…题目描述
给你两个 非空 的链表表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的并且每个节点只能存储 一位 数字。
请你将两个数相加并以相同形式返回一个表示和的链表。
你可以假设除了数字 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 题目数据保证列表表示的数字不含前导零
代码
第一个链表是q1第二个链表是q2
把每个链表的元素相加会有两种情况q1的长度大于等于q2q2的长度大于q1。
如果直接把链表2的值加到链表1那么q1的长度大于等于q2时就首先把q2加完然后再判断如果q1没遍历完就说明q1的长度大于q2那么再更新一下q1的节点。
q2的长度大于q1时或者进位仍存在由于直接把链表2的值加到链表1那么就需要给第一个链表增加节点然后再把q2的值加到新节点里面。进位仍存在的话只需要i增加一个节点存这个进位。
最后返回第一个链表即可
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){struct ListNode *q1 l1, *q2 l2; //q1指向链表1q2指向链表2struct ListNode *pre (struct ListNode*)malloc(sizeof(struct ListNode));pre-next q1; //pre为q1的前驱int sum, curSum, temp 0; //temp储存进位while(q1 ! NULL){ //同时遍历l1和l2并将l2的值加到l1if(q2 ! NULL){ sum q1-val q2-val temp;temp sum / 10;curSum sum % 10;q1-val curSum;q1 q1-next;q2 q2-next;pre pre-next;}else{ //l2的值全部加到l1sum q1-val temp;temp sum / 10;curSum sum % 10;q1-val curSum;q1 q1-next;pre pre-next;}}while(q2 ! NULL || temp ! 0){ //当l2的结点还有剩余或还有进位struct ListNode* s (struct ListNode*)malloc(sizeof(struct ListNode)); //为l1增加新结点s-next NULL; //一定要初始化否则会报错。q1 s;pre-next q1;if(q2 ! NULL){ //l2的值加到l1的新结点sum q2-val temp;temp sum / 10;curSum sum % 10;q1-val curSum;q1 q1-next;q2 q2-next;pre pre-next;}else{q1-val temp;temp 0;}}return l1; //返回l1
}