面试题 02.02. 返回倒数第 k 个节点
var kthToLast = function(head, k) {
if(head === null || k<= 0) return null
let fast = head
let slow = head
for (let i = 0; i < k; i++) {
if(fast === null) return null
fast = fast.next
}
while(fast!==null){
fast = fast.next
slow = slow.next
}
return slow.val
};
[445. 两数相加 II]
var addTwoNumbers = function(l1, l2) {
l1 = reverseList(l1);
l2 = reverseList(l2);
let carry = 0;
let dummyHead = new ListNode(0);
let current = dummyHead;
while (l1 !== null || l2 !== null) {
let sum = carry;
if (l1 !== null) {
sum += l1.val;
l1 = l1.next;
}
if (l2 !== null) {
sum += l2.val;
l2 = l2.next;
}
carry = Math.floor(sum / 10);
current.next = new ListNode(sum % 10);
current = current.next;
}
if (carry > 0) {
current.next = new ListNode(carry);
}
return reverseList(dummyHead.next);
};
function reverseList(head) {
let prev = null;
let current = head;
while (current !== null) {
let nextNode = current.next;
current.next = prev;
prev = current;
current = nextNode;
}
return prev;
}
105. 从前序与中序遍历序列构造二叉树
var buildTree = function (preorder, inorder) {
if (!preorder.length || !inorder.length) return null
let rootVal = preorder[0]
let root = new TreeNode(rootVal)
let rootIndexInorder = inorder.indexOf(rootVal)
let leftPreorder = preorder.slice(1, rootIndexInorder + 1)
let leftInorder = inorder.slice(0, rootIndexInorder)
root.left = buildTree(leftPreorder, leftInorder)
let rightPreorder = preorder.slice(rootIndexInorder + 1)
let rightInorder = inorder.slice(rootIndexInorder + 1)
root.right = buildTree(rightPreorder, rightInorder)
return root
};