给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
一点思路:
这其实是一个单项链表的题目,对链表这种数据结构,每一个元素必须包含数值和后继两部分,而本题的难点就在于此。
详细代码及注释:
public class LeetCode_x2 {
public static LinkNode returnLinkNode(LinkNode y1,LinkNode y2) {
LinkNode newNode = new LinkNode(0);
LinkNode p = y1, q = y2, curr = newNode;
//进位的数值
int arr = 0;
//元素有一个不为null,实行计算
while(p != null || q != null) {
int x = (p != null ) ? p.data : 0; // 需要考虑位数不同的数字相加
int y = (q != null ) ? q.data : 0;
int sum = 0;
sum = (x+y+arr);
arr = sum / 10;
//创建一个数值为 (sum %10 )的新结点,并将其设置为当前结点的下一个结点,然后将当前结点前进到下一个结点,这是最难的地方ÿ