题目描述
假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。
给定两个这种链表,请生成代表两个整数相加值的结果链表。
例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。
示例1
输入
[9,3,7],[6,3]
返回值
{1,0,0,0}
import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
* [9,3,7],[6,3] 链表长度不一致的时候 需要个位对齐
* 所以思路是 对链表1、2进行反转 相当于个位对齐相加
* 最后 再将相加结果的链表 反转 即可得到正确的值
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode head1, ListNode head2) {
if(head1==null){
return head2;
}
if(head2==null){
return head1;
}
int temp = 0;
ListNode curNode1 = reverseListNode(head1);
ListNode curNode2 = reverseListNode(head2);
ListNode head = new ListNode(-1);
ListNode tempNode = head;
while(curNode1!=null || curNode2!=null || temp!=0){
if(curNode1!=null){
temp += curNode1.val;
curNode1 = curNode1.next;
}
if(curNode2!=null){
temp += curNode2.val;
curNode2 = curNode2.next;
}
ListNode node = new ListNode(temp%10);
temp = temp/10;
head.next = node;
head = node;
}
return reverseListNode(tempNode.next);
}
public ListNode reverseListNode(ListNode head){
ListNode curNode = head.next;
ListNode preNode = head;
ListNode tempNode = null;
while(curNode!=null){
tempNode = curNode.next;
curNode.next = preNode;
preNode = curNode;
curNode = tempNode;
}
head.next = null;
return preNode;
}
}