华夏网站建设,房产机构网站建设目标定位,域名怎么解析到服务器上,微信公众号绑定网站1.map的底层
2.unorder_map哈希表有自己实现过吗#xff1f;哈希冲突
3.poll和epoll和select的优缺点、
4.线程同步机制是用来做什么的?
5.五子棋项目问题--
算法题:
6.LeetCode.重排链表 给定一个单链表 L 的头节点 head #xff0c;单链表 L 表示为#xff1a; L0…1.map的底层
2.unorder_map哈希表有自己实现过吗哈希冲突
3.poll和epoll和select的优缺点、
4.线程同步机制是用来做什么的?
5.五子棋项目问题--
算法题:
6.LeetCode.重排链表 给定一个单链表 L 的头节点 head 单链表 L 表示为 L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为 L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值而是需要实际的进行节点交换。 平时真的应该好好练算法 当时就给十分钟没撕出来wwww~~~~
思路:这道题就是相当于将三个简单题结合起来了分别是
876.链表的中间节点 这里要明白一个概念定义快慢指针同时指向头结点让它们俩同时移动slow移动一个节点fast移动两个节点当fast指向空时slow一定指向中间节点。是因为每次fast比slow快移动一个fast的速度是slow的2倍而当fast指向末尾时slow刚好移动fast的一半距离所以说slow指向了链表的中间节点。 206.翻转链表
最后就是合并链表
将这个题拆分一下就不难了首先是找到链表的中间节点 ListNode* findMid(ListNode* head){//找到中间节点ListNode* slowhead;ListNode* fasthead;while(fast!nullptrfast-next!nullptr){fastfast-next-next;slowslow-next;}return slow;} 然后是翻转链表 ListNode* reverseList(ListNode* head){//翻转后端节点ListNode* prevnullptr;ListNode* curhead;while(cur!nullptr){ListNode* tempcur-next;cur-nextprev;prevcur;curtemp;}return prev;} 最后是合并链表合并链表的思想如下图所示
首先将中点作为头结点然后将后端链表进行翻转 代码如下所示:
合并思路跟上面的黄线是一样的。要注意通过l1_temp来存储l1的下一个节点的地址防止丢失 void merge(ListNode* l1,ListNode* l2){ListNode* l1_temp;ListNode* l2_temp;while(l1!nullptrl2!nullptr){l1_templ1-next;l2_templ2-next;l1-nextl2;l1l1_temp;l2-nextl1;l2l2_temp;}}