• 2.10

    • 忘了哨兵了
    • 忘了是在 while 循环里往后加的了
  • 1.24

    • 结果存放在新的有哨兵的空链表,用三目运算符判断两者长度谁决定参与运算
    • 最后是只有一个进阶处理,而不是链表
  • 1.20

    • 哨兵节点与尾节点记录
    • while 循环里应该是或判断,后面走的时候,下一个是空节点也得走。
  • 这道题的链表本来就是倒顺序的

  • 11.9

    • 循环的条件为两者不同时为null,因为一个为null,另一可以继续走
    • 哨兵节点和尾节点cur提前定义好
    • 在循环中,不为null的节点提出数据,后续数据+进位.最后不为null的指针后移
    • 最后如果有进位,则处理后事

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode dummy = new ListNode(0);
        ListNode cur = dummy;
        int carry = 0;
        while(l1!=null||l2!=null){
            int num1 = l1!=null ? l1.val:0;
            int num2 = l2!=null ? l2.val:0;
            int sum = num1+num2+carry;
 
            carry = sum/10;
            cur.next = new ListNode(sum%10);
            cur = cur.next;
 
            if(l1!=null) l1 = l1.next;
            if(l2!=null) l2 = l2.next;
        }
        if(carry>0){
            cur.next = new ListNode(carry);
        }
        return dummy.next;
    }
}
  • 需要创建哨兵节点与尾节点cur,以免需要重复判断,在最终返回结果时返回💂节点的下一个节点(真正的节点)

  • 循环条件为两个链表都为空时结束循环,所以在循环里面需要判断到底是哪个为空的,用0来替代

  • 进位Carry时刻更新,循环结束后,进位如果不为0,则需把进位加到链表后

  • %10取余,子位,当前位

  • /10取商,取进位