c++链表获取长度,链表翻转, 查找链表倒数第K个节点以及中间点

测试数据

ListNode* pHead = new ListNode();pHead->m_key = 1;ListNode* pNode = pHead;for (int i = 2; i <= 5; i++){ListNode* pNew = new ListNode();pNew->m_key = i;pNew->pNext = nullptr;pNode->pNext = pNew;pNode = pNew;}pHead = reverseList(pHead);for (ListNode* pNode = pHead; pNode != nullptr; pNode = pNode->pNext){cout << pNode->m_key << endl;}

1:获得链表的长度

struct ListNode
{int m_key;//数据域ListNode* pNext;//指针域
};//求单链表中结点的个数
unsigned int getListLength(ListNode * pHead)
{//判断头结点是否为空if (pHead == nullptr)return 0;unsigned int Length=0;ListNode* pNode = pHead;//遍历链表while (pNode != nullptr){Length++;pNode = pNode->pNext;}return Length;
}

2:链表翻转

//将单链表进行翻转
ListNode* reverseList2(ListNode* pHead)
{if (pHead == nullptr||pHead->pNext==nullptr)return pHead;ListNode* pReverseHead=nullptr;//翻转的头结点ListNode* pCurrent = pHead;//当要插入翻转链表的节点while (pCurrent != nullptr){ListNode* pTemp = pCurrent->pNext;//记录下一个节点pCurrent->pNext = pReverseHead;//新节点的下一个节点就是头结点pReverseHead = pCurrent;//新头结点变为pCurretpCurrent = pTemp;//下一个插入的节点}return  pReverseHead;
}

3:查找单链表中倒数第K个节点(k>0)

//查找单链表中到处的第K个节点(k>0)
//(前后指针:先让前面的指针走到正向第K个节点,距离最后一个节点(n-k),前后指针同时移动,当指针走到最后一个节点时,后指针刚好走到倒数K个节点
ListNode* Rfundnumber(ListNode* pHead,int k)
{if (pHead == nullptr || k == 0)return nullptr;//定义前后指针ListNode* pAhead = pHead;ListNode* pBhead = pHead;//前指针移动到第K个节点(k-1)while(k > 1 && pAhead != nullptr){k--;pAhead = pAhead->pNext;}//判断倒数第K个节点不存在的情况if (nullptr == pAhead)return nullptr;//前后指针同时移动,当最后一个指针指向最后一个时while (pAhead->pNext != nullptr){pAhead = pAhead->pNext;pBhead = pBhead->pNext;}return pBhead;}

4:查找链表中间节点

/查找中间节点
//前后指针,前指针每次走两步,后指针每次走一步,前指针指向最后一个节点是的时候,后指针就是中间节点
ListNode* getMiddleNode(ListNode* pHead)
{//判断pHead是否为空或者只有一个结点if (nullptr == pHead || pHead->pNext == nullptr){return pHead;}//定义前后指针ListNode* pAhead = pHead;ListNode* pBehind = pHead;while (pAhead->pNext != nullptr) //指向最后一个结点时,跳出循环{pAhead = pAhead->pNext;if (pAhead->pNext != nullptr){pAhead = pAhead->pNext;}pBehind = pBehind->pNext;}return pBehind;}//测试数据
int main(int argc,const char* argv[])
{ListNode* pHead = new ListNode();pHead->m_key = 1;ListNode* pNode = pHead;for (int i = 2; i <= 5; i++){ListNode* pNew = new ListNode();pNew->m_key = i;pNew->pNext = nullptr;pNode->pNext = pNew;pNode = pNew;}ListNode* pHead1 = new ListNode();pHead1 = Rfundnumber(pHead,3);if (pHead1 == nullptr)cout << "没有找到" << endl;elsecout << pHead1->m_key << endl;
}

c++链表获取长度,链表翻转,查找链表倒数第K个节点以及中间点相关推荐

  1. 剑指 Offer 22. 链表中倒数第k个节点(C语言)

    输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6 ...

  2. 【链表】链表中倒数最后k个节点

    int   length(pHead):求链表长度 假设链表长度为n,求倒数后k个节点,就是求第n-k+1的节点为头结点的链表,只要求出n ,然后指针从链表头结点走n-k步即可 import java ...

  3. java数据结构 -链表 -获取有效节点个数,单链表中倒数k个节点

    // 1.获取到单链表的节点的个数(如果有头结点,不统计头结点)public static int getLength(HeroNode head){if (head.next == null){re ...

  4. 单链表倒数第K个节点的查找和显示

    单链表倒数第K个节点的查找和显示 最近在学回顾之前学到的知识,正好碰到了关于链表查找的一道面试题,在此贴出来,与小伙伴们共同交流~ 在刚看到题目,其实很容易就想到一个方法,就是先求链表的长度(leng ...

  5. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  6. python 链表中倒数第k个节点

    | 返回链表中倒数第K个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值 ...

  7. Java 算法之 “删除链表中倒数第k个节点”【钢镚核恒】

    删除链表中倒数第k个节点 简介 题目描述:给定⼀个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点[Leetcode] 链表中倒数第k个节点 , 和这篇文章使用的方法一致,就是变成找到倒数k+ ...

  8. 剑指offer:面试题22. 链表中倒数第k个节点

    题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1 ...

  9. 链表问题2——在双链表中删除倒数第K个节点

    题目 实现一个函数,可以删除双链表中倒数第K个节点. 要求 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 思路 双链表的思路与前一篇文章单链表的思路基本一致,注意last指针 ...

最新文章

  1. 【Spring】spring基于纯注解的声明式事务控制
  2. 【2020新书推荐】Introduction to Deep Learning
  3. G代码运行模拟软件-NC Viewer
  4. 自定义安装python,退格,方向键无法正常使用(转)
  5. Mozilla发布最大公共语音数据集Common Voice
  6. OpenFOAM计算时,同时将结果输出到:计算窗口+文件
  7. 洛谷 P2756 飞行员配对方案问题 (二分图/网络流,最佳匹配方案)
  8. ASP.Net快速开发新闻系统 在线播放
  9. SQLAlchemy Transactions
  10. 一元稀疏多项式加法运算
  11. Apache访问localhost页面403Forbidden
  12. VS.Net 2005 下载地址
  13. 如何将CHM转换为PDF文件?
  14. Amoeba配置读写分离
  15. python实现怼人小程序
  16. mysql ibd 恢复_MySQL:如何从ibd文件中恢复数据
  17. [计组笔记]存储器的扩展
  18. 优课教育HTML+css
  19. 2021秋软工实践第一次结对编程作业
  20. excel删除空行_Word如何转Excel?这样操作,数据清晰又直观!

热门文章

  1. oracle和mysql查询条件排序_Oracle数据库中ORDERBY排序和查询按IN条件的顺序输出
  2. python 两点曲线_Python自学教程| 3万字详解每个重要知识点(内附视频)
  3. 取消福昕阅读器的小手的向下的箭头
  4. Oracle CPU占用过高解决办法
  5. 编写一个程序,使用for循环打印由 * 号构成的实心棱形和空心棱形
  6. 人工智能:为什么很多机器学习和深度学习的论文复现不了?
  7. 纳米材料与技术类毕业论文文献有哪些?
  8. 优达学城计算机视觉pkl,优达学城机器学习工程师纳米学位项目介绍
  9. 工薪族巧理财之定期存款中整存整取、零存整取、存本取息之间的微妙区别
  10. 分布式三大利器之限流