如何将用链式结构按位逆序存储的两数相加(Leetcode T2)
例输入(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
此为题给ListNode的定义
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; } //用此方法创建新结点
}
因为按位逆序排列,所以两链第一位肯定是个位,第二位是十位。方法大致思想便是将两链式结构按位相加,有进位则进位
下为两链式结构相加方法
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = new ListNode(0);//头结点,head.val=0
ListNode sum = head;//建立局部变量方便指针后移链接新结点
int remain = 0;//用此变量记录每两位相加是否大于等于10需要进位
while (l1 != null || l2 != null) {//只要l1和l2不同时为空
int x = (l1 != null) ? l1.val : 0;//若已到空结点则此位值用0表示
int y = (l2 != null) ? l2.val : 0;
int he = remain + x + y;//此变量表示两加数加进位的和
remain = he / 10;//看是否有进位
sum.next = new ListNode(he % 10);//注意头结点值为0不赋值,从头结点的下一结点开始赋值个位数
sum = sum.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (remain >0) {//最高位算完后若有进位
sum.next = new ListNode(remain);
}
return head.next;
}
}
此图数据与题给不同,方便理解函数原理