链表


LC 02

// 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。
// 输入:l1 = [2,4,3], l2 = [5,6,4]
// 输出:[7,0,8]
// 解释:342 + 465 = 807.
public class TwoSum02 {
    // 定义一个节点
    public class ListNode {	// 题目给的
        int val;
        ListNode next;  // 下一个节点的引用

        ListNode() {
        }

        ListNode(int val) {
            this.val = val;
        }

        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }

    // 解法1
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int next1 = 0;                              // 是否要向下一位进一
        ListNode result = new ListNode(0);      // 要返回的结果
        ListNode current = result;                  // 当前指针在哪
        while (l1 != null || l2 != null || next1 != 0) {
            int i1 = l1 != null ? l1.val : 0;
            int i2 = l2 != null ? l2.val : 0;
            int total = i1 + i2 + next1;            // 上下两个链表对应位置相加的和
            next1 = total >= 10 ? 1 : 0;
            total = total >= 10 ? total - 10 : total;
            current.next = new ListNode(total);
            current = current.next;
            if (l1 != null)
                l1 = l1.next;
            if (l2 != null)
                l2 = l2.next;
        }
        return result.next;
    }
	
    // 解法2
    public ListNode addTwoNumbers2(ListNode l1, ListNode l2) {
        ListNode resNode = new ListNode(0);
        ListNode currNode = resNode;
        int carry = 0;  // 进位
        int l1Val;      // 上数
        int l2Val;      // 下数
        int temp;       // 求和
        while (l1 != null || l2 != null || carry > 0) {
            l1Val = l1 == null ? 0 : l1.val;
            l2Val = l2 == null ? 0 : l2.val;
            temp = l1Val + l2Val + carry;
            carry = temp / 10;
            currNode.next = new ListNode(temp % 10);
            currNode = currNode.next;

            l1 = l1 == null ? null : l1.next;
            l2 = l2 == null ? null : l2.next;
        }
        return resNode.next;
    }
}

文章作者: Prannt
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Prannt !
评论
  目录