目录
两个链表生成相加链表
描述
假设链表中每一个节点的值都在 0 到 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。
示例1
输入:
[9,3,7],[6,3]
返回值:
{1,0,0,0}
备注
链表的数据结构如下:
public class ListNode {
int val;
ListNode next = null;
}
方法:倒序相加
先将链表翻转,然后从个位开始相加,记录进位信息,和大数相加思想类似,将结果写入链表,最后将结果翻转
import java.util.*;
public class Solution {
public ListNode addInList (ListNode head1, ListNode head2) {
// write code here
ListNode p1=reverse(head1),p2=reverse(head2),res=new ListNode(0),cur=res;
int carry=0,sum;
while(p1!=null||p2!=null||carry!=0){
int n1=(p1==null?0:p1.val);//取第一个数的最后一位
int n2=(p2==null?0:p2.val);//取第二个数的最后一位
sum=(n1+n2+carry)%10;
carry=(n1+n2+carry)/10;
cur.next=new ListNode(sum);
cur=cur.next;
if(p1!=null) p1=p1.next;
if(p2!=null) p2=p2.next;
}
return reverse(res.next);
}
//翻转链表
public ListNode reverse(ListNode head){
if(head==null||head.next==null) {
return head;
}
ListNode cur=head,pre=null;
while(cur!=null){
ListNode next=cur.next;
cur.next=pre;
pre=cur;
cur=next;
}
return pre;
}
}
运行结果如图,