两数相加,针对ListNode的练习

2022-05-22  本文已影响0人  月如钩dgf

创建ListNode

public class ListNode {
    int val;  // 链表的值
    ListNode next;   // 下一个链表

    public ListNode(int val) {
        this.val = val;
    }
}

1.给链表赋值:

ListNode  l1= new ListNode(2);

2.从链表中取值:

ListNode  l1= new ListNode(2);
int a = l1.val ;

经典练习题:

2. 两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。
请你将两个数相加,并以相同形式返回一个表示和的链表。
你可以假设除了数字 0 之外,这两个数都不会以 0 开头。

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]
解释:342 + 465 = 807.

题解样例
public class TestListNode {
    public static void main(String[] args) {
        // 构造第一个链表数值l1
        ListNode l1 = new ListNode(2);
        l1.next = new ListNode(4);
        ListNode L2 = l1.next;
        L2.next = new ListNode(3);
        // 构造第二个链表
        ListNode l2 = new ListNode(5);
        l2.next = new ListNode(6);
        ListNode next = l2.next;
        next.next = new ListNode(4);

        ListNode listNode = addTwoNumbers(l1, l2);
        System.out.println(listNode);
    }

    public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode list = new ListNode(0); // 构建链表
        ListNode newList = list;
        int carry = 0;
        while (l1 != null || l2 != null) {
            // 取值
            int l1_1 = l1 != null ? l1.val : 0;
            int l2_2 = l2 != null ? l2.val : 0;
            int sum = carry + l1_1 + l2_2;
               carry = sum / 10;  // 计算carry
            newList.next = new ListNode(sum % 10);  // 为下一个节点赋值
            newList = newList.next;  // 指针移动到下一个节点

            if (l1 != null) {
                l1 = l1.next;
            }
            if (l2 != null) {
                l2 = l2.next;
            }

        }
        if (carry > 0) {
            newList.next = new ListNode(carry);
        }
        return list.next;
    }

}

每天进步一点点~

上一篇 下一篇

猜你喜欢

热点阅读