hash与有序表
unordered_set用法
unordered_map用法(和map用法一样,不过map有序,这个无序)——算法笔记6.4
有序表就是 Set和 Map
哈希表里面不管放多少条记录,时间复杂爱都是常数级别。
链表
注意:链表的调整可能会存在换头的操作,那就带返回值,不换头可以定义成void类型。
这道题其实类似于下图,外排序,用两个指针指着两个链表,谁小谁向右移动,相等时将value放入新数组,然后一起移动。有一个越界了就停。
笔试:直接放到栈里就行
栈先进后出,放进去以后弹出来就是倒着的,比较和原来链表一不一样就行。
更省空间的做法:把链表右边部分放入栈,然后弹出跟原链表从头开始比。
这种方法就用快慢指针(重要技巧)找到中点才行。
快慢指针:快指针一次走两步,慢指针一次走一步。快指针走完的时候,慢指针来到中点的位置。然后中点往下遍历的时候将其逆序,中点指向空,剩下的往回指,如下图,A和B同时往中间走,每一步去比对,有一个走到空就停下来。最后完了把右边部分链表恢复正常,然后返回true/false。
快慢指针需要具体定制:边界条件
//只用栈code
struct ListNode {
int val;
struct ListNode *next;
};
class Solution {
public:
bool isPail(ListNode* head) {
// write code here
stack<int> st;
ListNode* cur = head;
while(cur != NULL)
{
st.push(cur->val);
cur = cur->next;
}
while(head != NULL)
{
if