【作业9】字节真题:单链表相加
对应课程链接:拿捏算法面试课程
字节真题:单链表相加
这道题还考过挺多次的,你们直接看图片的描述吧

注意,不允许使用栈,队列等数据结构哦。
难点就是还得进位,而且链表只能前进不能后退。
思路:可以先它他们进行反转,相加之后,得到结果,再把结果进行反转
要求:
1、请打卡你的解题代码,如果能简单说一下思路则简单说一下思路。
2、给出你代码所用的时间复杂度和空间复杂度
核心模式做就行,这里我给一个统一的方法题
public ListNode linkedListAdd(ListNode head1, ListNode head2){
}
代码参考
// 注意,关于链表节点的定义(ListNode),我这里没有给出来哦
class SolutionAdd {
// 反转链表
public ListNode reverseList(ListNode node){
ListNode pre = null;
ListNode q= null;
while (node != null) {
q= node.next;
node.next = pre;
pre = node;
node = q;
}
return pre;
}
// 单链表相加
public ListNode addTwoNumbers(ListNode head1, ListNode head2) {
// 虚拟头节点
ListNode listNode = new ListNode(0);
ListNode p = listNode;
// sum 用来存放进位
int sum = 0;
while (head1 != null || head2 != null || sum!=0) {
if (head1 != null) {
sum += head1.val;
head1 = head1.next;
}
if (head2 != null) {
sum += head2.val;
head2 = head2.next;
}
p.next = new ListNode(sum % 10);
sum = sum / 10;
p = p.next;
}
return listNode.next;
}
}
时间复杂度:O(n+m)
空间复杂度:O(1)
共以下 5 个回答
这道题与牛客网上的 链表相加(二)一样,觉得不好测试的同学可以在上面写,链接放在这里https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b
另外这道题是正向存放的,如果这道题是反向存放呢?题目链接也放在这里了,有兴趣的同学可以尝试一下 https://www.nowcoder.com/practice/521d83306d964c1188639033eb59621d?tpId=196&tqId=40273&ru=/exam/oj
如果想在力扣上做,这里也有一道类似的:面试题 02.05. 链表求和,但是这道题是反向链表相加https://leetcode.cn/problems/sum-lists-lcci/
时间O(3(N+M)),空间O(2(N+M))。递归练习,有些耗空间。
时间:O(n+m)
空间:O(1)
时间:$O(n + m)$
空间:$O(1)$
时间O(n + m) 空间O(1)
“java
public class SolutionAdd {
}
“