给定两个逆序非空链表,求链表中两数相加的和,且仍返回逆序链表

Posted 伟雪无痕

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定两个逆序非空链表,求链表中两数相加的和,且仍返回逆序链表相关的知识,希望对你有一定的参考价值。

1.问题描述

       给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。

2.示例输出,eg:

输入:l1 = [2,4,3], l2 = [5,6,4]
输出:[7,0,8]

3.算法demo,此处以java实现

1).递归思路

class Solution 
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) 
        return this.addTwoRecursion(l1,l2,0);
    
    public ListNode addTwoRecursion(ListNode l1, ListNode l2,int temp) 
        if(l1==null&&l2==null)return temp==0?null:new ListNode(temp);
        if(l1 !=null)temp += l1.val;l1 = l1.next;
        if(l2 !=null)temp += l2.val;l2 = l2.next;
        return new ListNode(temp%10,addTwoRecursion(l1,l2,temp/10));
    

2.StringBuffer转换求和

class Solution 
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) 
        StringBuffer tempSB1 = new StringBuffer("");
        StringBuffer tempSB2 = new StringBuffer("");
        ListNode p = l1;
        while(p!=null)
            tempSB1.append(p.val);
            p=p.next;   
        
        p=l2;
        while(p!=null)
            tempSB2.append(p.val);
            p=p.next;
        
        tempSB1.reverse();
        tempSB2.reverse();
        BigInteger big1 = new BigInteger(new String(tempSB1));
        BigInteger big2 = new BigInteger(new String(tempSB2));
        BigInteger add = big1.add(big2);
        StringBuffer addStr = new StringBuffer(add.toString());
        addStr.reverse();
        ListNode listNodeRes = new ListNode(addStr.charAt(0)-48);//首节点
        p=listNodeRes;
        for(int i=1;i<addStr.length();i++)
            ListNode tempListNode = new ListNode(addStr.charAt(i)-48);
            p.next = tempListNode;
            p = tempListNode;
        
        return listNodeRes;
    


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; 
 

注:java中把char型数字转换成的int型数字,因为它们的ASCII码值刚好相差48,因此把char型数字减去48得到int型数字,eg: '18'被转换成18

以上是关于给定两个逆序非空链表,求链表中两数相加的和,且仍返回逆序链表的主要内容,如果未能解决你的问题,请参考以下文章

每日leetcode一题两数相加

两数相加

leetcode 链表 两数相加

代码题(11)— 链表两数相加

两数相加

链表表示的两数相加