c++链表获取长度,链表翻转,查找链表倒数第K个节点以及中间点
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个节点以及中间点相关推荐
- 剑指 Offer 22. 链表中倒数第k个节点(C语言)
输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6 ...
- 【链表】链表中倒数最后k个节点
int length(pHead):求链表长度 假设链表长度为n,求倒数后k个节点,就是求第n-k+1的节点为头结点的链表,只要求出n ,然后指针从链表头结点走n-k步即可 import java ...
- java数据结构 -链表 -获取有效节点个数,单链表中倒数k个节点
// 1.获取到单链表的节点的个数(如果有头结点,不统计头结点)public static int getLength(HeroNode head){if (head.next == null){re ...
- 单链表倒数第K个节点的查找和显示
单链表倒数第K个节点的查找和显示 最近在学回顾之前学到的知识,正好碰到了关于链表查找的一道面试题,在此贴出来,与小伙伴们共同交流~ 在刚看到题目,其实很容易就想到一个方法,就是先求链表的长度(leng ...
- 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...
点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...
- python 链表中倒数第k个节点
| 返回链表中倒数第K个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值 ...
- Java 算法之 “删除链表中倒数第k个节点”【钢镚核恒】
删除链表中倒数第k个节点 简介 题目描述:给定⼀个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点[Leetcode] 链表中倒数第k个节点 , 和这篇文章使用的方法一致,就是变成找到倒数k+ ...
- 剑指offer:面试题22. 链表中倒数第k个节点
题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1 ...
- 链表问题2——在双链表中删除倒数第K个节点
题目 实现一个函数,可以删除双链表中倒数第K个节点. 要求 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 思路 双链表的思路与前一篇文章单链表的思路基本一致,注意last指针 ...
最新文章
- 不止摩尔定律,计算领域值得学习的定律还有哪些?
- 16. 3Sum Closest
- 如何删除输入文本元素上的边框突出显示
- (连通图 模板题 无向图求桥)Critical Links -- UVA -- 796
- vscode vetur 不想标签属性老是转行 配置
- TypeScript基本数据类型
- fastdfs中浏览器访问获取不到文件_SpringBoot 2.0 开发案例之整合FastDFS分布式文件系统...
- C++中继承和派生详解(公有、私有、保护继承的区别)
- RocketMQ原理解析-producer 2.如何发送消息
- 罗马仕php30重量,认真测评 篇三:罗马仕sence8P+两年使用报告
- ubuntu虚拟机传文件到当前主机
- html5绘制圆形,Canvas绘制圆形
- JavaScript全栈开发-工具篇
- 【无标题】如何用HTML做出一份简单的问卷调查?
- 出现脑裂的原因及解决方案
- C字符串操作strlen/strnlen_s详解
- 用计算机观察声音的波形,用几何画板观察声音的波形
- nc文件分解为tiff文件
- 转:成功学专家卡耐基所言
- 局域网即时通信软件都有哪些?要如何选择?