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

相关推荐
Zevalin爱灰灰2 小时前
现代密码学 第二章——流密码【下】
算法·密码学
飞Link4 小时前
大模型长文本的“救命稻草”:深度解析 TurboQuant 与 KV Cache 压缩技术
算法
郝学胜-神的一滴5 小时前
深度学习优化核心:梯度下降与网络训练全解析
数据结构·人工智能·python·深度学习·算法·机器学习
Je1lyfish6 小时前
CMU15-445 (2025 Fall/2026 Spring) Project#3 - QueryExecution
linux·c语言·开发语言·数据结构·数据库·c++·算法
许彰午6 小时前
03-二叉树——从递归遍历到非递归实现
java·算法
Brilliantwxx6 小时前
【C++】 vector(代码实现+坑点讲解)
开发语言·c++·笔记·算法
NorburyL8 小时前
DPO笔记
深度学习·算法
老纪的技术唠嗑局8 小时前
深度解析 LLM Wiki / Obsidian-Wiki / GBrain:Agent 时代知识的“自组织”与“自进化”
大数据·数据库·人工智能·算法
小程故事多_8010 小时前
[大模型面试系列] 深度解析ReAct框架,大模型Agent的“思考+行动”底层逻辑
人工智能·react.js·面试·职场和发展·智能体
YXXY31311 小时前
模拟算法的介绍
算法