广州o2o网站建设,wordpress文章增加新字段,聚美优品,大型科技网站题目思路#xff1a; ①创建一个int类型的局部变量#xff0c;用来存储两个结点的Val值。
②判断该Val值与10求余(mod)后是否大于0,如果大于0, 则需要在下一个结点进位。
③最关键的步骤#xff1a;实现l1#xff0c;l2结点数值相加后构建新的存储求和后的结点#xff0…
题目思路 ①创建一个int类型的局部变量用来存储两个结点的Val值。
②判断该Val值与10求余(mod)后是否大于0,如果大于0, 则需要在下一个结点进位。
③最关键的步骤实现l1l2结点数值相加后构建新的存储求和后的结点此时先创建一个head头部结点以及一个尾部结点(tail)指向头部结点然后让tail指向当前的tail的next用来插入下一个。这个有点不好想。
最后循环判断两个链表是否为空最后返回head. 题解算法 C
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode* head nullptr; ListNode* tail nullptr; int carry 0; while ((l1!nullptr) || (l2!nullptr)) { int n1 l1?l1-gt;val:0; int n2 l2?l2-gt;val:0; int sum n1n2carry; if(!head)//head为空 { head tail new ListNode(sum%10); } else { tail-gt;next new ListNode(sum%10); tail tail-gt;next; } carry sum/10; if(l1)//l1非空 { l1 l1-gt;next; } if(l2) { l2 l2-gt;next; } if(carrygt;0) { tail-gt;next new ListNode(carry); } } return head; } };