温馨提示:这篇文章已超过374天没有更新,请注意相关的内容是否还可用!
摘要:在力扣HOT100榜单中的第二题是“两数相加”。这个问题要求实现一个函数,将两个数字相加并返回结果。题目旨在考察对基础数学运算的掌握程度以及编程能力。通过编写代码,实现两个数字的相加操作,并处理可能出现的特殊情况,如数字溢出等。
解题思路: 对于缺失的节点,需要进行补零处理,例如将973+23补充为973+023。 在相加的过程中,需要注意进位问题。 实现方式如下: 定义一个Solution类,其中包含一个方法addTwoNumbers,该方法接收两个ListNode类型的参数l1和l2。 使用两个指针head和tail,分别表示结果链表的头部和尾部,使用一个变量carry来保存进位值。 遍历l1和l2链表,对于每一个节点,将其值加上进位值carry,并对10取余,得到该位的结果,如果结果链表为空,则直接将当前结果作为头节点;否则将当前结果添加到尾部,并更新tail指针,然后将进位值保存为carry,并移动l1和l2指针到下一节点。 遍历结束后,如果仍有进位值carry,则在尾部添加一个节点,最后返回头节点即可。 以下是修正后的代码实现: class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = null, tail = null; // 定义头尾节点指针 int carry = 0; // 定义进位值 while (l1 != null || l2 != null) { // 遍历链表直到都为null int n1 = (l1 != null) ? l1.val : 0; // 对缺失的节点进行补零处理 int n2 = (l2 != null) ? l2.val : 0; // 同上 int sum = n1 + n2 + carry; // 计算当前位的和加上进位值 if (head == null) { // 如果结果链表为空,则创建头节点 head = tail = new ListNode(sum % 10); // 创建节点并赋值 } else { // 否则将当前结果添加到尾部 tail.next = new ListNode(sum % 10); // 创建新节点并连接到尾部 tail = tail.next; // 更新尾部指针位置 } carry = sum / 10; // 更新进位值 if (l1 != null) l1 = l1.next; // 移动l1指针到下一节点 if (l2 != null) l2 = l2.next; // 移动l2指针到下一节点 } if (carry > 0) tail.next = new ListNode(carry); // 如果仍有进位值,则在尾部添加节点 return head; // 返回头节点作为结果链表的起点 } }
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...