[445] 两数相加 II(37)

103 阅读1分钟

这个题思路,就是入栈,然后一次出栈,对出栈的数字进行相加,但是有个难点就是要计算进位,num/10 就是计算他的进位,num % 10 就是计算进位以后的个位数

var addTwoNumbers = function (l1, l2) {

	const stack1 = [], stack2 = [];
	while (l1) {
		stack1.push(l1.val);
		l1 = l1.next;
	}
	while (l2) {
		stack2.push(l2.val);
		l2 = l2.next;
	}

	console.log(stack1, stack2)
	let resN = null;
	let carry = 0; // 记录进位

	let pre = new ListNode(-1) // 弄一个头节点 方法二用
	while (stack1.length || stack2.length || carry !== 0) {
		const num1 = stack1.length ? stack1.pop() : 0;
		const num2 = stack2.length ? stack2.pop() : 0;

		let val = num1 + num2 + carry;
		// 下面carry 和val 赋值不能颠倒
		carry = val / 10 | 0// 计算进位
		val = val % 10; // 计算当前节点的值

		/* 	// 方法一
			const newNode = new ListNode(val); 
			// newNode的值 
			// 第一步为 个位数 -> null
			// 第二步为 十位数->(个位数 -> null)
			newNode.next = resN; 
			resN = newNode; */
		console.log(val, pre)
		// 方法二
		const newNode = new ListNode(val, pre.next);
		console.log(newNode)
		pre.next = newNode;

	}
	// return resN; // 方法一
	return pre.next; // 方法二

};

力扣本题传送门