list使用
秦枫-_-
慵懒的程序猿
展开
-
C++判断链表有无环(有则给出位置)双指针或哈希表
如图例子:有环的话则会返回节点位置一、双指针法:1.先判断是否存在环2.当第一次快慢指针相遇时,说明存在环,此时相遇点在圆内,此时慢指针走过的距离是x+y,快指针走过的距离是x+y+z+y,因为快指针走过的距离是慢指针的2倍,所以得到等式2(x+y)=x+y+z+y,所以x = z3.接下来,令res = head,让res和slow同时再走一段距离为x的路程,二者就在环入口相遇为何慢指针第一圈走不完一定会和快指针相遇?首先,第一步,快指针先进入环第二步:当慢指针刚到达环的入口时,快.原创 2021-04-09 23:34:27 · 379 阅读 · 1 评论 -
C++构建LRU缓存机制(实现方法:哈希表+双端队列或循环链表)
LRU算法:是大部分操作系统为最大化页面命中率而广泛采用的一种页面置换算法。该算法的思路是,发生缺页中断时,选择未使用时间最长的页面置换出去。 [1] 从程序运行的原理来看,最近最少使用算法是比较接近理想的一种页面置换算法,这种算法既充分利用了内存中页面调用的历史信息,又正确反映了程序的局部问题。要实现LRU,就要使用其他数据结构实现上述几个函数:第一种方法:哈希表+双端队列class LRUCache {private: int num;//元素数量 int _capacit.原创 2021-04-08 23:11:32 · 366 阅读 · 1 评论 -
C++二叉搜索树转换成双向循环链表(双指针或数组)
本文解法基于性质:二叉搜索树的中序遍历为 递增序列 。将 二叉搜索树 转换成一个 “排序的循环双向链表” ,其中包含三个要素:1.排序链表: 节点应从小到大排序,因此应使用 中序遍历2.“从小到大”访问树的节点。 双向链表: 在构建相邻节点的引用关系时,设前驱节点 pre 和当前节点 cur ,不仅应构建 pre.right= cur ,也应构建 cur.left = pre 。3.循环链表: 设链表头节点 head 和尾节点 tail ,则应构建 head.left = tail 和 tai.原创 2021-04-04 23:32:29 · 2488 阅读 · 4 评论 -
C++递归本质(个人理解:栈和链表思想结合)
先放一个B站视频链接看过之后相信很多人会有跟我一样的感觉:递归解释所谓递归,网上有很多人进行解释,大部分都是这样写的:自己调用自身,本质就是将规模较大的问题化成结构相同但规模较小的问题。即大事化小,小事化了。为了避免死循环,要设一个结束条件,不能无限划分下去,最后再一层一层返回所有未操作步骤,简单来说就是将大的分解成小的,再由小的还原成大的,很多人说递归的本质是栈,毕竟栈是先入后出的原则,大的先放进去,小的后放进去(一层一层分解),最后是小的先弹出(还原)但其实我觉得不完全准确,递归的本质更像是栈跟链表的原创 2021-03-20 20:45:42 · 388 阅读 · 3 评论 -
C++链表反转(二):部分反转(附整个代码实现)
原理很简单:就是把中间要反转的部分截取出来反转后,再放回去,放回去时注意pre的下个结点是right,而left的下个结点是succ;下方是部分代码实现,如果想看整体代码建议去看我的另一篇文章https://blog.csdn.net/qq_41884662/article/details/114994357,[将此代码加上里边的代码即可实现整体结构] ListNode* reverseBetween(ListNode* head, int left, int right) {原创 2021-03-19 23:13:43 · 954 阅读 · 1 评论 -
C++单链表的创建,插入,打印(附整个代码实现)
class A { public: //先创造一个头结点 ListNode* CreateListNode(int value) { ListNode* pNode = new ListNode(); pNode->m_nValue = value; pNode->m_pNext = NULL; return pNode;//创造头结点 .原创 2021-03-19 00:31:58 · 1109 阅读 · 2 评论 -
C++链表反转(一),整体反转
定义两个指针: pre 和 cur ;pre在前 cur 在后。每次让 pre 的 next 指向 cur ,实现一次局部反转局部反转完成之后, pre 和 cur 同时往前移动一个位置循环上述过程,直至 pre 到达链表尾部代码如下:ListNode* reverseList(ListNode* head) { ListNode* cur = NULL, * pre = head; while (pre != NULL) { .原创 2021-03-18 23:30:03 · 294 阅读 · 1 评论 -
C++链表list的使用以及vector,list,deque区别
1.list释义:list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表有点一样,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。但是list并不要求在一段连续的内存中。1.1list的实现:list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。前驱元素指针域保存了前驱元素的首地址;数据域则是本节点的数据;后继元素指针域则保存了后继元素的首地址。其实,list和循环原创 2021-03-13 22:46:03 · 469 阅读 · 1 评论