2. Add Two Numbers 给定的两个链表是逆序排列的,相加后放在一个新的链表里边

本文介绍了一种使用链表实现两个非负整数相加的方法。输入的两个链表分别表示两个数字,数字以逆序存储,每个节点包含一个数字。通过遍历两个链表并逐位相加的方式,最终返回一个新的链表作为计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution { 
   public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 
        ListNode l3=new ListNode(0); //调用构造函数
        int flag=0; //定义进位符
        ListNode p1=l1,p2=l2,p3=l3; 
        while(p1!=null || p2!=null){ 
            if(p1!=null){ 
                flag+=p1.val; 
                p1=p1.next; 
            } 
            if(p2!=null){ 
                flag+=p2.val; 
                p2=p2.next; 
            } 
            p3.next=new ListNode(flag%10); //注意这儿的书写
            p3=p3.next; 
            flag/=10; 
        } 
        if(flag!=0)  p3.next=new ListNode(1); //如果进位不为0,则后边加1
        return l3.next; //根据前边的逻辑,l3的第一个节点无用所以弃用,因为置为了0
    } 
}



public class Solution { 
   public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 
        ListNode l3=new ListNode(0); 
        int flag=0; 
        ListNode p1=l1,p2=l2,p3=l3; 
        while(p1!=null || p2!=null){ 
            if(p1!=null){ 
                flag+=p1.val; 
                p1=p1.next; 
            } 
            if(p2!=null){ 
                flag+=p2.val; 
                p2=p2.next; 
            } 
            p3.val=flag%10; //不同于上边的是,这儿没有把第一个节点给废弃掉
            flag/=10; 
            if(p1!=null || p2!=null) //如果后续还有加操作,才创建新节点p3.next。否则不创建
                p3=(p3.next=new ListNode(0)); 
        } 
        if(flag!=0)  p3.next=new ListNode(1); //如果进位为1,则创建一个val为1的新节点
        return l3; 
    } 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值