![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
刷题库
文章平均质量分 63
SUXIAONI_
这个作者很懒,什么都没留下…
展开
-
判断链表是否带环?若带环求环的长度?若带环求环的入口点?并计算以上每个问题的时间复杂度?
1、怎么判断一个单链表是否带环 如果单链表带环,那么从链表头开始时遍历就会进入死循环。可以用两个速度不同的指针,先让两个指针pFast和pSlow同时指向pHead,然后每次使pFast走两步,使pSlow走一步,只要链表带环,那么pFast和pSlow总会相遇。// 判断链表是否带环,若带环给出相遇点PNode HasCircle(PNode pHead){ PNo原创 2017-07-17 22:00:29 · 531 阅读 · 0 评论 -
实现一颗二叉树的层序遍历
二叉树的层序遍历(队列实现):// 层序遍历 void LevelOrder() { if(_pRoot == NULL) return; queue q; q.push(_pRoot); while(!q.empty()) { Node* pCur = NULL; pCur = q.front(); q.pop(); cout_data<原创 2017-07-22 22:13:06 · 381 阅读 · 0 评论 -
求二叉树叶子节点的个数+求二叉树第k层的节点个数
求二叉树叶子节点的个数、求二叉树第k层的节点个数: //二叉树的高度 size_t Height() { return _Height(_pRoot); } //访问叶子结点 size_t GetLeafNode() { return _GetLeafNode(_pRoot); } //求某一层的结点个数 size_t GetKLevelNode(size原创 2017-07-22 21:38:02 · 433 阅读 · 0 评论 -
判断一个节点是否在一棵二叉树中
判断一个节点是否在一棵二叉树中(递归算法): bool IsExsitNode(Node* node) { return _IsExsitNode(_pRoot,node); } bool _IsExsitNode(Node* pRoot,Node* node) { if(pRoot == NULL || node == NUL原创 2017-07-31 18:30:06 · 633 阅读 · 0 评论 -
二叉树镜像(递归和非递归)+ 判断一棵二叉树是否是平衡二叉树+ 判断一棵树是否为完全二叉树
二叉树镜像(递归和非递归):// 求二叉树的镜像:非递归 void GetBinaryMirror_Nor() { if(_pRoot == NULL) return; stack s; s.push(_pRoot); while(!s.empty()) { Node* pCur = NULL; pCur = s.top(); s.pop();原创 2017-07-26 00:46:04 · 1580 阅读 · 0 评论 -
1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)2.判断两个链表是否相交,若相交,求交点。(假设链表可能带环)【升级版】
1.判断两个链表是否相交,若相交,求交点。(假设链表不带环) / 判断两个单链表是否相交(链表不带环)int IsListCross(PNode L1, PNode L2){ if(L1 == NULL || L2 == NULL) return 0; while(L1->_pNext) { L1 = L1->_pNext; } while(L2->_pNext) {原创 2017-07-18 13:41:37 · 315 阅读 · 0 评论 -
合并两个有序链表,合并以后的链表依旧有序
头文件:typedef int DataType;typedef unsigned int size_t;#define NULL 0typedef struct Node{ DataType _data; struct Node* _pNext;}Node, *PNode;// 在单链表的尾部插入一个节点void PushBack(PNode* pHead, DataTy原创 2017-07-15 16:32:02 · 503 阅读 · 0 评论 -
逆置/反转单链表
typedef int DataType;typedef unsigned int size_t;#define NULL 0typedef struct Node{ DataType _data; struct Node* _pNext;}Node, *PNode;#include "LinkList.h"#include #include // 在单链表的尾部插入原创 2017-07-15 18:27:03 · 245 阅读 · 0 评论 -
查找单链表的倒数第k个节点,要求只能遍历一次链表
源文件:#include "LinkList.h"#include #include // 在单链表的尾部插入一个节点void PushBack(PNode* pHead, DataType data){ PNode pCurNode = NULL; PNode pNewNode = NULL; assert(pHead); pNewNode = BuyNode(da原创 2017-07-15 19:56:05 · 529 阅读 · 0 评论 -
删除一个无头单链表的非尾节点+从尾到头打印单链表
删除一个单链表的非尾结点,并且不能遍历链表,所以我们可以尝试删除其他结点以代替此节点,在这里,我们用要删除的结点的下一个结点来代替此节点,删除下一个结点之前,先将这个节点保存起来,再把此结点的值域和指针域赋值给原本要删除的结点,这样一来,只用删除当前被保存起来的结点即可。部分代码:// 删除单链表的非尾结点void DeleteNotTailNode(PNode pos){原创 2017-07-17 14:52:46 · 304 阅读 · 0 评论 -
二叉树的非递归遍历(前中后)
//前序 void PreOrder_Nor() { if(_pRoot == NULL) return; stack s; s.push(_pRoot); while(!s.empty()) { Node* pCur = NULL; pCur = s.top(); cout_data<<" "; s.pop(); if(pCur->_p原创 2017-07-26 00:36:43 · 313 阅读 · 0 评论