求链表的倒数第N个节点
最近看一本书上有求链表的倒数第N个节点,简单实现了下 链表,实现方案如下
1、不借助链表长度顺序遍历倒数第N个节点 GetReserveN就是如此实现。
2、当然如果链表记录了节点长度也可以直接正序遍历出来 第lenth-N个节点就是倒数节点。
template<class T> class LinkedList
{
public:operator T(){return m_data;}virtual ~LinkedList(){if(m_size!=0)Clear();}void AddData(T data){if(m_size==0){m_data=data;}else{LinkedList<T>* pTem=new LinkedList<T> ;pTem->m_data=data ;pTem->m_pPrev=this->m_pTail ;pTem->m_pNext=0;this->m_pTail->m_pNext=pTem;this->m_pTail=pTem;}m_size++;}void SetData(T data){m_data=data;}void Clear(){LinkedList<T>*pTem=this->Next();LinkedList<T>*pDel;for(; pTem;){pDel=pTem;pTem=pTem->Next();delete pDel;}m_pTail=this;m_pPrev=this;m_size=0;}int Size(){return m_size;}T GetData(){return m_data ;}LinkedList<T>*Next(){return m_pNext;}LinkedList<T>*GetTail(){return m_pTail;}LinkedList<T>*GetPrevious(){return m_pPrev;}LinkedList<T>* GetReserveN(int n){if(n>m_size||n<=0)return 0;LinkedList<T>*pFront=this;LinkedList<T>*pBehand=this;for(int i=1; i<=n; i++){pBehand=pBehand->Next();}while(true){if(pBehand==0)return pFront ;pBehand=pBehand->Next();pFront=pFront->Next();}}static LinkedList<T>* CreateList(){return new LinkedList<T>;};
private:LinkedList():m_pNext(0),m_pPrev(0),m_pTail(0),m_size(0){m_pTail=this;m_pPrev=this;}LinkedList<T>*m_pNext;LinkedList<T>*m_pTail;LinkedList<T>*m_pPrev;int m_size;T m_data;
};
测试代码如下
#include <iostream>
#include<string>
#include "LinkedList.h"
using namespace std;
int main()
{LinkedList<string> *pTem=LinkedList<string>::CreateList();pTem->AddData("xxx");pTem->AddData("dsdf");pTem->AddData("dfsd");pTem->AddData("dseee");pTem->AddData("xxxx");pTem->AddData("dsfdsf");pTem->AddData("fdsfd");LinkedList<string>*p=pTem ;for(; p;){cout<<p->GetData()<<"," ;p=p->Next();}cout<<endl;LinkedList<string>*pData=pTem->GetReserveN(5);if(pData)cout<<"Reserve N:"<<pData->GetData()<<endl;else{cout<<"Reserver Not Found !"<<endl;}return 0;
}
求链表的倒数第N个节点相关推荐
- 求单项链表的倒数第k个节点(c语言)
求单项链表的倒数第k个节点(只遍历一次) 单向链表求倒数第k个节点我们可以先遍历一遍找出链表的长度,再设置一个指针走(n-k)步可以找到倒数第k个节点. 但是,这需要遍历两次,如果只允许遍历一次我们就 ...
- 刻意练习:LeetCode实战 -- Task11. 删除链表的倒数第N个节点
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- java 链表删除头结点,删除链表的倒数第N个节点,并返回链表的头节点
面试的时候遇到了一个笔试题,是leetcode的原题,原题的连接: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ ...
- 剑指offer之打印链表的倒数第N个节点的值
1 问题 打印链表的倒数第N个节点的值,(要求能只能便利链表一次) 比如链表如下,打印倒数第三个值就是4 1-> 2-> 3-> 4-> 5-> 6 2 思路 既然只要只 ...
- 【剑指offer - C++/Java】14、链表中倒数第k的节点
在线题目链接:链表中倒数第k的节点 文章目录 1 题目描述 2 题目分析 2.1 Java代码 2.2 C++代码 3 总结 1 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2 题目分析 这 ...
- 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ
LeetCode24. 两两交换链表中的节点 力扣题目链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 ...
- Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点
找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...
- 22 链表中倒数第k个节点
22 链表中倒数第k个节点 为了实现只遍历一次就能找到倒数第kkk个节点,我们可以定义两个指针.第一个指针从链表的头指针开始遍历向前走k−1k-1k−1步,第二个指针保持不动:从第kkk步开始,第二个 ...
- [数据结构]题海啊,全是水(三)链表中倒数第k个节点、链表的回文结构、链表分割
这是一个目录 链表中倒数第k个节点 解法一 解法二 链表的回文结构 思路 代码 链表分割 思路 代码 最后 菜鸡大学生的数据结构--刷题篇3 我们的第三题小宝贝儿回归了! 菜鸡大学生明白,笔试oj题目 ...
最新文章
- MyBatis(二)MyBatis基本流程源码分析
- different behavior in AG3 and P8I about Territory management - popup window display
- 五 Python之socket网络编程
- 前端学习(2981):Json格式转换
- LeetCode每日打卡 - 汉明距离
- 工作流实战篇_01_flowable 流程Demo案例
- Missing iOS Distribution signing identity for XXXXX
- python给excel排序_如何使用Python对Excel工作表排序
- 成功与不成功并非智商差别:男人,如何唤醒心灵的巨人
- 【POJ3264】Balanced Lineup,线段树入门
- STM8单片机定时器1编码器功能使用详解
- 什么是PM2 ---- (零秒重启)
- java usb camera_Android usb camera设备添加
- 追赶法matlab算法,追赶法matlab程序
- 统计学-贾俊平(第四版)学习笔记
- Unity 3D 射线检测方法
- 纯CSS实现播放暂停按钮变形动画
- java中intern,JAVA中String的intern方法
- IT男人:四十岁是一枝花吗?
- 《山海经》只能是政府组织编写的
热门文章
- 巨量招生,堪比985的“双非”大学,也考408了!中国科学院大学许多研究所改考!...
- STM32模拟GPS输出PPS、GPRMC与VLP16时钟同步
- 基于Springboot+mybatis+mysql+html图书管理系统2
- 电脑主机的两个 USB 接口用一根数据线连起来
- 计算机应用基础上机考试试题,计算机应用基础上机考试试题.docx
- Android:SpannableString使用详解
- 第五周学习博客(CSS)
- 关于腾讯weibo获取头像的问题
- 2021最新OPPOR9s无人直播手机教程
- 简体中文版的Intellij IDEA如何取消绿色波浪线拼写错误