我是靠谱客的博主 寂寞汉堡,最近开发中收集的这篇文章主要介绍leetcode1642链表求和(给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

给定两个用链表表示的整数,每个节点包含一个数位。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。这些数位是反向存放的,也就是个位排在链表首部。编写函数对这两个整数求和,并用链表形式返回结果。
示例:

输入:(7 -> 1 -> 6) + (5 -> 9 -> 2),即617 + 295
输出:2 -> 1 -> 9,即912
进阶:假设这些数位是正向存放的,请再做一遍。

示例:

输入:(6 -> 1 -> 7) + (2 -> 9 -> 5),即617 + 295
输出:9 -> 1 -> 2,即912

思路:

用递归解法,分别从两个链表的第一个节点开始,取一个值相加,相加的结果对10取模,取模得到值作为结果的一位节点。重复上述操作再从两个链表的下一位取值相加 ( 注 意 得 加 上 前 一 次 操 作 的 进 位 ) color{red}{(注意得加上前一次操作的进位)} (),结果存入结点,通过递归将这些节点连接起来。
 

代码如下:
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    
		//add为求和函数    
        ListNode res = add(l1, l2, 0);
        return res;
    }

	//head1和head2分别为两个链表的第一个元素,value为上一次操作的进位
    static ListNode add(ListNode head1,ListNode head2, int value) {
        if (head1 == null && head2 == null) {
            if (value == 1) {
            	//最后还有进位需要生成最后一个值为1的节点
                return new ListNode(1);
            } else {
            	//已完成最后一位的相加操作,开始逐层返回
                return null;
            }
        }
        if (head1 != null) {
        	//链表1要相加的那位不为空就把值加上
            value += head1.val;
        }
        if (head2 != null) {
        	//链表2要相加的那位不为空就把值加上
            value += head2.val;
        }
        //如果两个值相加后>=10就会产生进位,对10取模可得到减去进位的值
        ListNode res = new ListNode(value % 10);
        //如果两位相加的值小于10则没有进位,即进位为0
        //如果两位相加的值>=10,则要向高位进1
        //此处value值的意义变成了向高位的进位
        value = value < 10 ? 0 : 1;
        
        //此处的三目运算符功能是防止产生空指向异常,只有head1或者head2
        //不为空的情况才下才有next节点
        //传入的value值为向高位的进位
        res.next = add(head1==null?null:head1.next, head2==null?null:head2.next, value);
        return res;
    }
}

最后

以上就是寂寞汉堡为你收集整理的leetcode1642链表求和(给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果)的全部内容,希望文章能够帮你解决leetcode1642链表求和(给定两个用链表表示的整数,每个节点包含一个数位。 这些数位是反向存放的,也就是个位排在链表首部。 编写函数对这两个整数求和,并用链表形式返回结果)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部