力扣日记(2)

博主复习了昨日力扣题目,因自身Java和数据结构基础薄弱而发愁。体现出在力扣刷题过程中,对相关知识掌握不足的情况。

复习了昨日的力扣(1),,因为java和数据结构都太菜了,呜呜~~~~

 

 

### LeetCode2 题:两数相加 #### 解题思路 LeetCode2 题的目标是给定两个非空链表,表示两个非负整数。这些数字按逆序存储在链表中,每个节点包含一位数字。需要返回一个新的链表,该链表表示这两个数之和。 主要的解题思路包括以下几个方面: - **遍历链表**:通过同时遍历输入的两个链表 `l1` 和 `l2` 来计算每一位上的数值总和。 - **进位处理**:当某一位的和大于等于 10 时,需记录进位值,并将其余部分作为当前位的结果存入新链表。 - **边界条件**:考虑其中一个链表先结束的情况以及最后可能存在的额外进位。 此方法的时间复杂度为 O(max(m, n)),其中 m 和 n 是两条链表的长度[^3]。 #### 代码实现 以下是基于 Java 的具体实现: ```java /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode dummyHead = new ListNode(0); ListNode current = dummyHead; int carry = 0; while (l1 != null || l2 != null) { int val1 = (l1 != null) ? l1.val : 0; int val2 = (l2 != null) ? l2.val : 0; int sum = val1 + val2 + carry; carry = sum / 10; current.next = new ListNode(sum % 10); current = current.next; if (l1 != null) l1 = l1.next; if (l2 != null) l2 = l2.next; } if (carry > 0) { current.next = new ListNode(carry); } return dummyHead.next; } } ``` 这段代码定义了一个辅助头结点 `dummyHead`,用于简化最终结果链表的操作流程。循环过程中不断更新指针位置并创建新的节点来保存每一步的求和结果[^4]。 --- #### 关键点解析 1. 使用虚拟头结点 (`dummyHead`) 方便统一操作逻辑,无需单独处理第一个有效节点的特殊情况。 2. 对于较长的一个链表或者存在剩余进位的情况下继续构建结果链表。 3. 时间复杂度分析表明这种方法非常高效,在实际应用中有较好的性能表现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~Yogi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值