LeetCode:2两数相加

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 dummy = new ListNode(0);
        ListNode curr = dummy;
        //处理进位
        int carry = 0;

        while(l1 != null || l2 != null || carry != 0){
            int val1 = (l1 != null) ? l1.val : 0;
            int val2 = (l2 != null) ? l2.val : 0;
            //求和
            int sum = val1 + val2 + carry;

            carry = sum / 10;
            //设置下一个节点值,并将指针后移一位
            curr.next = new ListNode(sum % 10);
            curr = curr.next;
            
            if(l1 != null) l1 = l1.next;
            if(l2 != null) l2 = l2.next;
        }
        return dummy.next;
    }
}

这段代码开头先设置了一个哨兵节点,如果不设置哨兵节点在给这个链表加上后续元素的时候如果curr是null节点,在执行curr.next会空指针异常报错,所以代码需要在开始进行判断;同时在初始化第一个元素的时候会与循环内得到后续元素的代码发生重复,造成代码冗余。

以下情况可以直接设置哨兵节点:

1.从零开始凭空拼凑新的链表的时候

2.原链表的头节点可能被删除、修改或者替换的时候;

相关推荐
Yuzhiyuxia18 分钟前
【AI Agent面试系列】AI Agent实战设计
人工智能·面试·职场和发展
文丑颜不良啊2 小时前
LeetCode2861~2880题目解析
java·leetcode
青少儿编程课堂2 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
在所不辞兄3 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus13 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Code_Solitude20 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司20 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
文丑颜不良啊21 小时前
LeetCode2821~2840题目解析
java·leetcode
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论