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.原链表的头节点可能被删除、修改或者替换的时候;

相关推荐
_Narcissus_20 分钟前
枚举和模拟算法笔记
c语言·数据结构·c++·笔记·算法·模拟·枚举
天疆说26 分钟前
策略的进化:从随心所欲到稳健前行
算法
冻柠檬飞冰走茶35 分钟前
《数据结构实验指导-C++语言版》 在顺序表 list 中查找元素 x
开发语言·数据结构·c++·算法·list
2601_9672642839 分钟前
React教程全家桶实战redux+antd+React Hooks前端js视频,2025徐老师React18&19课程含项目实战(完结)
职场和发展
happyprince2 小时前
03-深刻观-CodeX哲学与升华(源码)
算法·ai编程
不会打球的王子2 小时前
Day 27:迁移学习与微调 — 站在巨人的肩膀上
算法
数模竞赛Paid answer2 小时前
2025年中青杯数学建模A题康养城市建设求解全过程论文及程序
算法·数学建模·数据分析·中青杯
网安蟹佬霸2 小时前
密码学安全实战:从加密原理到哈希破解的完整攻防指南
网络·算法·安全·web安全·开源·密码学·哈希算法
yangmu32033 小时前
深度解析:短视频是如何通过“算法+神经机制”劫持用户时间的?
算法
LuminousCPP3 小时前
栈和队列专题(四):LeetCode 232. 用栈实现队列|双栈分工 + 按需迁移 + 摊还 O(1)
c语言·数据结构·笔记·算法·leetcode