链表反转-题目描述
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
思考题:
请同时实现迭代版本和递归版本。
样例
输入:1->2->3->4->5->NULL
输出:5->4->3->2->1->NULL
输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。
返回的结果用数组存储。
样例
输入:[2, 3, 5]
返回:[5, 3, 2]
1 | /** |
1 | /** |
| 题目分类 | 题目名称 | 考察点 | 其他说明 |
|---|---|---|---|
| 排序链表删除重复节点 | 哨兵、双指针 | ||
| 链表中环的入口 | 双指针之快慢指针 | ||
| 链表倒数第K个节点 | 双指针之快慢指针 | ||
| 两个链表的公共节点 | 双指针之快慢指针 |
设计一个支持push,pop,top等操作并且可以在O(1)时间内检索出最小元素的堆栈。
push(x)–将元素x插入栈中
pop()–移除栈顶元素
top()–得到栈顶元素
getMin()–得到栈中最小元素
样例
MinStack minStack = new MinStack();
minStack.push(-1);
minStack.push(3);
minStack.push(-4);
minStack.getMin(); —> Returns -4.
minStack.pop();
minStack.top(); —> Returns 3.
minStack.getMin(); —> Returns -1.
空间换时间,用另外一个stack去储存最小值。
另外,如果要求额外存储空间控制在$O(1)$呢?
思路:
如果新来的元素NewCome,比之前的最小值oldMin更小;oldMin存的就是当前元素了; 现在的问题变成“当当前元素被pop出之后,如何计算出新的最小值)?” 新存入的diff = newMin - oldMin; oldMin = newMin - diff ; 因为diff小于0,所以oldMin更大;
1 | class MinStack { |