摘要:
题目大意:设计一个用于LRU cache算法的数据结构。 题目链接。关于LRU的基本知识可参考here分析:为了保持cache的性能,使查找,插入,删除都有较高的性能,我们使用双向链表(std::list)和哈希表(std::unordered_map)作为cache的数据结构,因为:双向链表插入删... 阅读全文
摘要:
题目(题目链接):Given a singly linked listL:L0→L1→…→Ln-1→Ln,reorder it to:L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values... 阅读全文
摘要:
题目:非递归实现二叉树的后序遍历。题目链接算法1:非递归使用栈。首先把根节点压栈,然后循环如下操作:用一个变量来记录上次访问的节点,如果当前栈顶元素左右儿子都为空 或者 上次访问的节点非空且等于栈顶节点的左儿子或右儿子,则直接访问;否则把栈顶元素的右节点和左节点依次压栈。代码如下: 1 /** 2 ... 阅读全文
摘要:
题目:非递归实现二叉树的前序遍历。题目链接算法1:使用栈的非递归遍历。先用根节点初始化栈,然后循环如下操作:访问栈顶节点,先后把栈顶节点右节点和左节点压栈(次序不能反,先右节点,后左节点),代码如下: 1 /** 2 * Definition for binary tree 3 * struct... 阅读全文
摘要:
题目:判断单链表是否有环,如果有则找出环的起点。题目链接这是另一道题的扩展,利用快慢指针判断出是否有环后,还需要找出环的起点,分析如下:设链表长度为len(链表中非空next指针的个数,下面所说的长度均为非空next指针的个数),链表head到环的起点长度为a,环起点到快慢指针相遇点的长度为b,环的... 阅读全文
摘要:
题目:判断单链表是否有环,要求O(1)空间复杂度。题目链接利用快慢指针,开始两个指针均指向链表head,然后循环移动,慢指针移动1步,快指针则移动2步,如果链表有环则两个指针一定会相遇。代码如下: 1 /** 2 * Definition for singly-linked list. 3 * ... 阅读全文