初始化hash表,遍历原链表,添加键值对(原节点,现节点),然后构建新节点的 next 和 random 引用指向。 map[cur] ->next = map[cur ->next],map[cur] ->random = map[cur ->random],最后返回map[head]。
1.用unordered_set存储每一个节点,如果节点不在set中则insert,在就返回该节点。
2.用快慢指针定义从head到交叉节点为距离a,从交叉节点到相遇为b,环中另一部分为c,则2*(a+b)=a+b+n(b+c),a=c+(n-1)(b+c),所以定义一个从head开始的节点与slow同时出发,两者一定在交叉节点相遇,因为a等于c加上n-1个环,由此该节点即为交叉节点。
1.首先如果链表头结点或下一节点是空则直接返回头结点。然后定义两个节点,prev指向空,while循环head,用节点p指向head,head指向head ->next,然后p节点指向prev,然后prev节点变为p节点。
2.首先如果链表头结点或下一节点是空则直接返回头结点。然后定义两个节点,prev指向空,while循环head,用节点p指向head ->next,head指向prev,然后prev节点变为head节点,head节点变为p节点。
使用循环遍历数组for(auto num : nums) ++map[num],将数组中每个值得出现次数装入hash表中,使用for(auto &[key, value] : map)遍历hash表如果出现次数也即是value为1,则将对应的key加入最后的输出结果中。
首先定义两个栈stk1,stk2,用stk1实现appendTail队尾插入操作,在deleteHead函数中实现判断stk1是否为空,不为空则将stk1的所有元素push到stk2中,然后将stk2的第一个元素出栈实现队列删除首元素的功能,然后将stk2的所有元素在push到stk1中。
定义两个栈stk1和stk2,一个用来存储元素,另一个辅助栈用来存储当前所有元素中的最小值并保存在最上方。 push函数:将元素push进stk1中,判断stk2中是否有元素,没有则直接push到stk2中,有则判断x和stk.top()的大小,x<=stk.top()则stk2.push(x)。
pop函数:判断stk1.top()和stk2.top()是否相等,相等则一起pop,否则只stk1.pop()。
top函数:直接返回stk1.top()。
min函数:直接返回stk2.top()。
使用reverse先旋转前n个,再旋转后面的,最后旋转所有元素。