【首先,题目是给了两个链表,我们可以直接使用哦】
- 我们要自己创建一个链表来存储结果
//将第一个节点的值初始化为0,用来指向头指针(意思就是pre后面的那个值才是头指针),返回结果 LinkNode pre = new LinkNode(0); // cur是一个可移动的指针,作为储存两个数之和的位置 LinkNode cur= pre;
- 定义一个记录进位值的标记,初始化为0
int carry = 0;
- 然后开始构建新的结果链表,使用while循环,确定循环跳出的条件:
l1 != null || l2 != null
-
通过
l1.val 获取L1当前节点的值;
通过l2.val 获取L2当前节点的值;
- 通过相加计算sum的值
-
int sum = x + y + carry;
-
- 进入结果链表的赋值阶段
- 首先先计算进位数(更新进位数)
- 计算sum值,就是结果链表当前位置的值,
- 创建一个新的节点,值为当前位的值
// 更新进位值,将当前和除以 10,得到的商作为新的进位值 carry = sum / 10; // 更新当前位的值,将当前和对 10 取余,得到的余数作为当前位的值 sum = sum % 10; // 创建一个新的节点,值为当前位的值,连接到结果链表的末尾 cur.next = new ListNode(sum);
- 进入结果链表的赋值阶段
-
- 此节点赋值完毕,更新cur指针,更新L1指针,更新L2指针 (while循环体内容结束)
cur = cur.next; // 更新 cur 指针,指向新创建的节点,以便下一次迭代 if (l1 != null) l1 = l1.next; // 如果 l1 还有剩余节点,将 l1 指向下一个节点 if (l2 != null) l2 = l2.next; // 如果 l2 还有剩余节点,将 l2 指向下一个节点
- 在循环体外判断最后的进位是否为1,若为1,则最后一位补1
if (carry == 1) { // 最后的进位是否为 1,如果是,创建一个新的节点,值为进位值,连接到结果链表的末尾 cur.next = new ListNode(carry);
【补充知识:】
- new ListNode()中的括号里面的参数含义
2、
3、
标签:13,cur,--,sum,相加,链表,l2,l1,节点 From: https://www.cnblogs.com/18191xq/p/17847570.html