
力扣-2题(Java)
发布日期:2021-05-10 02:26:42
浏览次数:22
分类:精选文章
本文共 3118 字,大约阅读时间需要 10 分钟。
好的,我来帮助您优化这段内容。以下是优化后的版本:
题目链接:图片加载失败时请查看实际链接。题目如下:
[Kattis - Add Two Numbers as Linked Lists](https://kattis.com/solutions/qqqiy проческиЦУУУУ)
给定两个只含有数字的单链表,我们需要将它们相加,得到一个新的单链表。每个节点只包含一个数字值,下一个指针。请注意,这两个链表可能不在同一个位置开始,因此需要对齐他们的末尾。
解一:
:=getVar рубить.
public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = new ListNode(0); ListNode cur = head; int sum = 0, carry = 0; while (l1 != null && l2 != null) { int sumNodes = carry ? l1.val + l2.val + 1 : l1.val + l2.val; carry = sumNodes >= 10 ? 1 : 0; sumNodes %= 10; ListNode nextNode = new ListNode(sumNodes); cur.next = nextNode; cur = nextNode; l1 = l1.next; l2 = l2.next; } while (l1 != null) { int sumNode = carry ? l1.val + 1 : l1.val; carry = sumNode >= 10 ? 1 : 0; sumNode %= 10; ListNode nextNode = new ListNode(sumNode); cur.next = nextNode; cur = nextNode; l1 = l1.next; } while (l2 != null) { int sumNode = carry ? l2.val + 1 : l2.val; carry = sumNode >= 10 ? 1 : 0; sumNode %= 10; ListNode nextNode = new ListNode(sumNode); cur.next = nextNode; cur = nextNode; l2 = l2.next; } if (carry == 1) { cur.next = new ListNode(1); cur = cur.next; } return head.next; }}
解二:
这是一个更加简洁的解法,同学们可以通过不断对齐两个链表的末尾节点,逐位相加处理每一位数字,并根据情况处理进位。
public class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head = new ListNode(0); ListNode cur = head; int carry = 0; while (l1 != null && l2 != null) { int sum = l1.val + l2.val + carry; carry = sum >= 10 ? 1 : 0; sum %= 10; cur.next = new ListNode(sum); cur = cur.next; l1 = l1.next; l2 = l2.next; } while (l1 != null) { sum = l1.val + carry; carry = sum >= 10 ? 1 : 0; sum %= 10; cur.next = new ListNode(sum); cur = cur.next; l1 = l1.next; } while (l2 != null) { sum = l2.val + carry; carry = sum >= 10 ? 1 : 0; sum %= 10; cur.next = new ListNode(sum); cur = cur.next; l2 = l2.next; } if (carry == 1) { cur.next = new ListNode(1); cur = cur.next; } return head.next; }}
哪种解法更好?
解一的思路更注重逐条处理,分别对齐两个链表的末端节点,按照顺序进行相加和进位处理。解二则通过合并两个链表的操作,只需在处理每一位数字时同时处理两个节点及进位。在实际开发中,解二的代码更短,更易于维护。但如果对齐的两个链表的长度不同,可以考虑解一的方案,以确保不会出现超出链表长度的错误。
技术要点:
- 链表对齐:由于两个链表可能长度不一,需要先从末端开始对齐,逐位进行加法。
- 进位处理:每次相加时检查是否需要进位,并将进位传递到下一个步骤。
- 尾节点处理:处理完一个链表后,继续处理剩余的链表节点(可能存在一个链表还有剩余节点的情况)。
希望您能够从中得到帮助!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年04月17日 06时14分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
pair的用法
2019-03-09
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
2019-03-11
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11
嵌入式系统试题库(CSU)
2019-03-12
00013.05 字符串比较
2019-03-12
UE4 错误列表 error码(只记录我遇到的情况,持续添加,未完成)
2019-03-13
Android 架构组件 – 让天下没有难做的 App
2019-03-13
第01问:MySQL 一次 insert 刷几次盘?
2019-03-13
laravel server error 服务器内部错误
2019-03-15
一道简单的访问越界、栈溢出pwn解题记录
2019-03-15
springboot redis key乱码
2019-03-16
有了Trae,人人都是程序员的时代来了
2023-01-23
Docker部署postgresql-11以及主从配置
2023-01-23
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
2023-01-23
09-docker系列-docker网络你了解多少(下)
2023-01-23
#C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
2023-01-24
java教师管理系统(ssm)
2023-01-24