最近看一本书上有求链表的倒数第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个节点相关推荐

  1. 求单项链表的倒数第k个节点(c语言)

    求单项链表的倒数第k个节点(只遍历一次) 单向链表求倒数第k个节点我们可以先遍历一遍找出链表的长度,再设置一个指针走(n-k)步可以找到倒数第k个节点. 但是,这需要遍历两次,如果只允许遍历一次我们就 ...

  2. 刻意练习:LeetCode实战 -- Task11. 删除链表的倒数第N个节点

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  3. java 链表删除头结点,删除链表的倒数第N个节点,并返回链表的头节点

    面试的时候遇到了一个笔试题,是leetcode的原题,原题的连接: https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ ...

  4. 剑指offer之打印链表的倒数第N个节点的值

    1 问题 打印链表的倒数第N个节点的值,(要求能只能便利链表一次) 比如链表如下,打印倒数第三个值就是4 1-> 2-> 3-> 4-> 5-> 6 2 思路 既然只要只 ...

  5. 【剑指offer - C++/Java】14、链表中倒数第k的节点

    在线题目链接:链表中倒数第k的节点 文章目录 1 题目描述 2 题目分析 2.1 Java代码 2.2 C++代码 3 总结 1 题目描述 输入一个链表,输出该链表中倒数第k个结点. 2 题目分析 这 ...

  6. 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ

    LeetCode24. 两两交换链表中的节点 力扣题目链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 ...

  7. Java数据结构与算法———(10)单链表应用实例,找到单链表中倒数第K个节点

    找到单链表中的倒数第K个节点,并打印输出节点.两段代码,思路都是相似的. 一.代码1 public class SingleLinkedListDemo {public static void mai ...

  8. 22 链表中倒数第k个节点

    22 链表中倒数第k个节点 为了实现只遍历一次就能找到倒数第kkk个节点,我们可以定义两个指针.第一个指针从链表的头指针开始遍历向前走k−1k-1k−1步,第二个指针保持不动:从第kkk步开始,第二个 ...

  9. [数据结构]题海啊,全是水(三)链表中倒数第k个节点、链表的回文结构、链表分割

    这是一个目录 链表中倒数第k个节点 解法一 解法二 链表的回文结构 思路 代码 链表分割 思路 代码 最后 菜鸡大学生的数据结构--刷题篇3 我们的第三题小宝贝儿回归了! 菜鸡大学生明白,笔试oj题目 ...

最新文章

  1. MyBatis(二)MyBatis基本流程源码分析
  2. different behavior in AG3 and P8I about Territory management - popup window display
  3. 五 Python之socket网络编程
  4. 前端学习(2981):Json格式转换
  5. LeetCode每日打卡 - 汉明距离
  6. 工作流实战篇_01_flowable 流程Demo案例
  7. Missing iOS Distribution signing identity for XXXXX
  8. python给excel排序_如何使用Python对Excel工作表排序
  9. 成功与不成功并非智商差别:男人,如何唤醒心灵的巨人
  10. 【POJ3264】Balanced Lineup,线段树入门
  11. STM8单片机定时器1编码器功能使用详解
  12. 什么是PM2 ---- (零秒重启)
  13. java usb camera_Android usb camera设备添加
  14. 追赶法matlab算法,追赶法matlab程序
  15. 统计学-贾俊平(第四版)学习笔记
  16. Unity 3D 射线检测方法
  17. 纯CSS实现播放暂停按钮变形动画
  18. java中intern,JAVA中String的intern方法
  19. IT男人:四十岁是一枝花吗?
  20. 《山海经》只能是政府组织编写的

热门文章

  1. 巨量招生,堪比985的“双非”大学,也考408了!中国科学院大学许多研究所改考!...
  2. STM32模拟GPS输出PPS、GPRMC与VLP16时钟同步
  3. 基于Springboot+mybatis+mysql+html图书管理系统2
  4. 电脑主机的两个 USB 接口用一根数据线连起来
  5. 计算机应用基础上机考试试题,计算机应用基础上机考试试题.docx
  6. Android:SpannableString使用详解
  7. 第五周学习博客(CSS)
  8. 关于腾讯weibo获取头像的问题
  9. 2021最新OPPOR9s无人直播手机教程
  10. 简体中文版的Intellij IDEA如何取消绿色波浪线拼写错误