力扣2.两数相加 给你两个非空的链表表示两个非负的整数。它们每位数字都是按照逆序的方式存储的并且每个节点只能存储一位数字。请你将两个数相加并以相同形式返回一个表示和的链表。你可以假设除了数字 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题目数据保证列表表示的数字不含前导零回答这是链表相关知识学习相关知识但遇到题却不会应用这是官方答案class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { ListNode *head nullptr,*tail nullptr; int carry 0; while(l1||l2){ int n1l1?l1-val:0; int n2l2?l2-val:0; int sum n1n2carry; if(!head){ head tail new ListNode(sum %10); }else{ tail-next new ListNode(sum%10); tail tail-next; } carry sum/10; if(l1){ l1l1-next; } if(l2){ l2 l2-next; } } if(carry 0){ tail-next new ListNode(carry); } return head; } };这是个非常好的关于链表的标准模板还是得多刷题下面是ai的详细注释class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { // head 记录头节点最终返回tail 指向尾节点用于追加 ListNode *head nullptr, *tail nullptr; int carry 0; // 进位 // 只要两链表有其一不为空就继续短的补0 while (l1 || l2) { // 取当前位若节点为空则补0 int n1 l1 ? l1-val : 0; int n2 l2 ? l2-val : 0; int sum n1 n2 carry; // 尾插法建立新节点存个位数 if (!head) { head tail new ListNode(sum % 10); } else { tail-next new ListNode(sum % 10); tail tail-next; } // 更新进位十位数 carry sum / 10; // 移动原链表指针必须判空防止空指针解引用 if (l1) l1 l1-next; if (l2) l2 l2-next; } // 循环结束若还有进位补一个最高位节点如 5510补个1 if (carry 0) { tail-next new ListNode(carry); } return head; } };结论理论知识和现实操作还是有差距需要加强自己的动手写代码能力以前都是注重理论上的。