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