电子商务网站建设需求概述,福州推广营销,保险销售的建设网站策划书,wordpress space每日一题#xff08;两数相加#xff09;
2. 两数相加 - 力扣#xff08;LeetCode#xff09; 思路 思路#xff1a; 由于链表从头开始向后存储的是低权值位的数据#xff0c;所以只需要两个指针p1和p2#xff0c;分别从链表的头节点开始遍历。同时创建一个新的指针new…每日一题两数相加
2. 两数相加 - 力扣LeetCode 思路 思路 由于链表从头开始向后存储的是低权值位的数据所以只需要两个指针p1和p2分别从链表的头节点开始遍历。同时创建一个新的指针newhead用于构造新链表将创建的新节点进行头插。并在这个构造的新链表的相应的节点中存储p1和p2对应值的相加结果。 但是p1和p2所对应的节点的值相加可能会产生进位所以创建一个pre变量用于存储相应的进位值。假设p1和p2所指向的节点的值是n1和n2那么产生的进位值就是pre n1n2pre/10;同时对应新的创建的节点的值就应该是 (pren1n2)%10;。对应代码如下 struct ListNode* p1NULL, *p2 NULL, *newhead NULL,*tail NULL;int pre 0;//pre一开始的值必须是0if(!l1)return l2;if(!l2)return l1;p1 l1;p2 l2;while(p1p2){
struct ListNode* newnode (struct ListNode*)malloc(sizeof(struct ListNode));newnode-val (p1-valp2-valpre)%10;newnode-next NULL;if(newhead NULL){//更新pre进位pre (p1-val p2-val)/10;newhead tail newnode;}else{//更新pre进位pre (p1-val p2-valpre)/10;tail-next newnode;tail tail-next;}p1 p1-next;p2 p2-next;}假如遇到的链表有以下这种长短不一的情况就需要接着遍历那个较长的链表将较长的链表中未被遍历的节点的值与pre的值一起参与运算因为这俩个链表的相同长度的部分的链表的最后一个节点中存储的值也会存在相加产生进位的情况。代码实现如下 while(p2)//当p2没有走完{
struct ListNode* newnode (struct ListNode*)malloc(sizeof(struct ListNode));newnode-val (p2-valpre)%10;newnode-next NULL;//更新prepre (p2-valpre)/10;p2 p2-next;tail-next newnode;tail tail-next;} while(p1)//当p1没有走完{
struct ListNode* newnode (struct ListNode*)malloc(sizeof(struct ListNode));newnode-val (p1-valpre)%10;newnode-next NULL;//更新prepre (p1-valpre)/10;p1 p1-next;tail-next newnode;tail tail-next;}假如链表是如下这几种情况即便是将两个链表都遍历之后此时的进位值仍然是1说明此时的相加计算还没有结束此时还需要一个节点来存储进位值所以在将两个链表遍历结束之后需要对pre的值进行判断假若pre的值是0则直接返回newhead即可pre的值若是1则还需要创建一个节点。代码如下 if(pre){
struct ListNode* newnode (struct ListNode*)malloc(sizeof(struct ListNode));newnode-val pre;newnode-next NULL;tail-next newnode;tail tail-next;}代码实现
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){struct ListNode* p1NULL, *p2 NULL, *newhead NULL,*tail NULL;int pre 0;if(!l1)return l2;if(!l2)return l1;p1 l1;p2 l2;while(p1p2){
struct ListNode* newnode (struct ListNode*)malloc(sizeof(struct ListNode));newnode-val (p1-valp2-valpre)%10;newnode-next NULL;if(newhead NULL){//更新pre进位pre (p1-val p2-val)/10;newhead tail newnode;}else{//更新pre进位pre (p1-val p2-valpre)/10;tail-next newnode;tail tail-next;}p1 p1-next;p2 p2-next;}if(pre){
struct ListNode* newnode (struct ListNode*)malloc(sizeof(struct ListNode));newnode-val pre;newnode-next NULL;tail-next newnode;tail tail-next;}return newhead;
}完结
两数相加的链表习题的分析就到这里啦若有不足欢迎评论区指正下期见