单链表基础操作C++实现
来源:互联网 发布:网站制作软件培训 编辑:程序博客网 时间:2024/06/03 23:03
Node.h:
template <class T> struct Node{ T val; Node<T>* next; Node(T nVal) { val = nVal; next = nullptr; } Node(void){}};
#include "Node.h"#include <iostream>using namespace std;template <class T> class LinkList{ int size;public: Node<T>* head; Node<T>* tail; LinkList(void) { head = tail = nullptr; size = 0; } ~LinkList(void){ Clear(); } void Add(T val) { Node<T>* pNode = new Node<T>(val); if (head == nullptr) { head = pNode; tail = pNode; } else { tail->next = pNode; tail = pNode; } size++; } bool insertAt(int pos, T val) { Node<T>* pNode = nullptr; if (pos<0 || pos>size()) { cout << "out of range" << endl; return false; } if (pos == size) { Add(val); return true; } else if (pos == 0) { pNode = new Node<T>(val); pNode->next = head; head = pNode; } else { Node<T>* pNode = GetPointerAt(pos - 1); Node<T>* newNode = new Node<T>(val); newNode->next = pNode->next; pNode->next = newNode; } size++; return true; } bool RemoveAt(int pos) { Node<T>* pNode = nullptr; if (size == 0) { cout << "list is empty" << endl; return false; } if (pos<0 || pos>size - 1) { cout << "out of range" << endl; return false; } if (size == 1) { Claer(); } else { if (pos == 0) { pNode = head; head = head->next; delete pNode; } else { Node<T>* pPreNode = GetPointerAt(pos - 1); pNode = pPreNode->next; pPreNode->next = pNode->next; delete pNode; if (pos == size - 1) tail = pPreNode; } } size--; return true; } T GetHeadVal() { if (size == 0) { cout << "list is empty" << endl; return NULL; } return head->val; } T GetTailVal() { if (size == 0) { cout << "list is empty" << endl; return NULL; } return tail->val; } int Find(T val) { int index = 0; Node<T>* ip = head; while (ip != nullptr) { if (ip->val == val) return index; ip = ip->next; index++; } return -1; } bool IsEmpty() { return size == 0 ? true : false; } int Size(){ return size; } void Clear() { while (head != nullptr) { Node<T>* tmp = head->next; delete head; head = tmp; } tail = nullptr; size = 0; } private: Node<T>* GetPointerAt(int pos) { Node<T>* pNode = nullptr; if (pos<0 || pos>size - 1) cout << "out of range" << endl; else { pNode = head; for (int i = 1; i <= pos; i++) pNode = pNode->next; } return pNode; }};
0 0
- 文章标题C语言实现单链表之基础操作
- C语言实现单链表基础操作--增删查改
- 单链表基础操作C++实现
- 单链表基础操作C++实现
- 单链表基础操作C++实现
- 链表基础操作+实例[C语言实现]
- 链式队列的基础操作实现(C语言)
- C常用基础操作
- 单链表的基础操作(C++实现)
- 单链表基础操作的Java实现
- 单链表的基础操作java实现
- java实现单链表的基础操作
- c语言实现单链表基础面试题
- 单链表基本操作c语实现
- 单链表操作演示----C语言实现
- C语言实现单链表的各种操作
- 单链表操作大全C语言实现
- C实现单链表的基本操作笔记
- 给Unity开发者的C#内存管理(第二部分) C# Memory Management for Unity Developers (part 2 of 3)
- MyEclipse安装Eclipse Memory Analyzer插件,并进行错误文件分析流程
- 操作给其它表做外键的数据
- centos7 saltstack快速安装+自定义模块实例
- android 必看知识点
- 单链表基础操作C++实现
- Android 性能优化典范(六)
- OpenCV:copyMakeBorder的用法
- poj 3278 Catch That Cow (BFS)
- 文件上传一些事(ie8/9下提示下载json文件)
- 仿360悬浮窗
- Python操作Excel--xlwt
- 88. Merge Sorted Array(二刷,一种简洁的写法)
- Linux系统安装VMware Tools