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. 不止摩尔定律,计算领域值得学习的定律还有哪些?
  2. 16. 3Sum Closest
  3. 如何删除输入文本元素上的边框突出显示
  4. (连通图 模板题 无向图求桥)Critical Links -- UVA -- 796
  5. vscode vetur 不想标签属性老是转行 配置
  6. TypeScript基本数据类型
  7. fastdfs中浏览器访问获取不到文件_SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统...
  8. C++中继承和派生详解(公有、私有、保护继承的区别)
  9. RocketMQ原理解析-producer 2.如何发送消息
  10. 罗马仕php30重量,认真测评 篇三:罗马仕sence8P+两年使用报告
  11. ubuntu虚拟机传文件到当前主机
  12. html5绘制圆形,Canvas绘制圆形
  13. JavaScript全栈开发-工具篇
  14. 【无标题】如何用HTML做出一份简单的问卷调查?
  15. 出现脑裂的原因及解决方案
  16. C字符串操作strlen/strnlen_s详解
  17. 用计算机观察声音的波形,用几何画板观察声音的波形
  18. nc文件分解为tiff文件
  19. 转:成功学专家卡耐基所言
  20. 局域网即时通信软件都有哪些?要如何选择?

热门文章

  1. Android~老项目项目升级GradleAGP 7.0踩坑
  2. 阿里云ecs服务器如何设置实现访问互联网
  3. 中考词汇测试软件,百词斩中考版
  4. XMPP——Smack[2]会话、消息监听、字体表情和聊天窗口控制
  5. html5游戏需求文档,游戏PRD丨狼人杀APP产品需求文档
  6. 请排列RJ45交叉双绞线水晶头的顺序?
  7. 在利用PS进行绘画时,线条画不直怎么办?
  8. 合成大西瓜html源码,合成大西瓜
  9. Python|随机数的奥秘
  10. 微信支付账单修改数字