每日一练_29(2021.7.13)请你将两个数相加,并以相同形式返回一个表示和的链表。

该博客展示了如何使用Java实现将两个链表表示的数相加,通过模拟加法运算过程,逐位相加并处理进位,最后生成新的链表表示结果。示例代码中包括链表节点定义、添加节点、打印链表和两数相加的方法,并给出了测试用例。

额,个人修改了些许,用于整合和巩固自己的知识面。这里有个链接(里面有这道题的答案,可以参考):https://blog.youkuaiyun.com/qq_41389482/article/details/112171429

代码如下:

import java.util.*;
class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
    
    public void addNode(int e){
        ListNode newNode = new ListNode(e);
        if(this.next == null) {
            this.next = newNode;
        }else {
            this.next.addNode(e);
        }
    }
    
    public void print() {
        System.out.print(this.val);
        if(this.next != null) {
            System.out.print("-->");
            this.next.print();
        }
    }
    
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
           ListNode pre = new ListNode();
           ListNode cur = pre;
            int carry = 0;
            while(l1!=null || l2!=null){
                int x = l1 == null ? 0 : l1.val;
                int y = l2 == null ? 0 : l2.val;
                int sum = x + y + carry;
                
                carry = sum / 10;            
                sum = sum % 10;
                
                cur.next = new ListNode(sum);

                cur = cur.next;
                if(l1 != null)
                    l1 = l1.next;
                if(l2 != null)
                    l2 = l2.next;
            }
            if(carry == 1)
                cur.next = new ListNode(1);

            return pre.next;
        }
}

public class addNumbers{
    public static void main(String args[]){
        ListNode L1 = new ListNode(0);
        ListNode L2 = new ListNode(0);
        ListNode L3 = new ListNode(0);
        System.out.println("请输入链表L1元素数量:");
        Scanner input1 = new Scanner(System.in);
        int m = input1.nextInt();
        System.out.println("请依次输入L1的数据:");
        int a[] = new int[m];
        for(int i=0;i<m;i++){
            Scanner input = new Scanner(System.in);
            a[i]=input.nextInt();
            L1.addNode(a[i]);
        }
        L1.next.print();
        System.out.println("");
        System.out.println("请输入链表L2元素数量:");
        int n = input1.nextInt();
        System.out.println("请依次输入L2的数据:");
        int b[] = new int[n];
        for(int i=0;i<n;i++){
            Scanner input = new Scanner(System.in);
            b[i]=input.nextInt();
            L2.addNode(a[i]);
        }
        L2.next.print();
        System.out.println("");
        L3=L3.addTwoNumbers(L1,L2);
        System.out.println("得到链L3的数据:");
        L3.next.print();
        System.out.println("");
        /*while(L3.next!=null) {
            System.out.print(L3.next.val+" ");
            L3=L3.next;
        }转化为数组的时候可以用到。*/
        
    }
    
}

测试结果:

请输入链表L1元素数量:
3
请依次输入L1的数据:
1
2
3
1-->2-->3
请输入链表L2元素数量:
2
请依次输入L2的数据:
1
2
1-->2
2-->4-->3

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值