2021-04-11算法打卡

1、给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

示例1: 输入:head = [4,2,1,3] 输出:[1,2,3,4]示例2: 输入:head = [-1,5,3,4,0] 输出:[-1,0,3,4,5]

/** * Definition for singly-linked list. * function ListNode(val, next) { *this.val = (val===undefined ? 0 : val) *this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @return {ListNode} */ var sortList = function(head) { if (!head || !head.next) return head let arr = [] for (; head; head = head.next) { arr.push(head) } arr.sort((a,b)=> a.val - b.val) for(let i = 0; i < arr.length; i++) { arr[i].next = arr[i+1] || null }return arr[0] };

2、汉诺塔问题
在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。
【2021-04-11算法打卡】请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。你需要原地修改栈。
示例1: 输入:A = [2, 1, 0], B = [], C = [] 输出:C = [2, 1, 0]示例2: 输入:A = [1, 0], B = [], C = [] 输出:C = [1, 0]

/** * @param {number[]} A * @param {number[]} B * @param {number[]} C * @return {void} Do not return anything, modify C in-place instead. */ var hanota = function(A, B, C) { if(A.length === 0) { return; } while(A.length > 1) { B.push(A.pop()) } C.push(A.pop()); while(B.length > 0) { A.push(B.pop()); }; hanota(A, B, C) };

    推荐阅读