自定义带头结点的单链表类(C++)----------测试(二)
来源:互联网 发布:英语单词翻译软件 编辑:程序博客网 时间:2024/06/05 07:59
题目:请完成下面这个类的方法代码,请实现带头结点的单链表
class Link{public: Link(); //构造函数 ~Link(); //析构函数 void insertHead(int val); //头插法 void insertTail(int val); //尾插法 void deleteNode(int val); //删除链表所有值为val的节点private: class Node { public: Node(int data=0):_data(data), _pnext(NULL){} int _data; Node *_pnext; }; Node *_phead;};
实现
构造函数
Link::Link(){ _phead =new Node();}
题目中,有个内置类,这个类是关于节点的,有节点值,也有节点的下一个指针。
析构函数
Link::~Link(){ Node *point = _phead->_pnext; while (point !=NULL) { _phead->_pnext = point->_pnext; delete point; point = _phead->_pnext; } delete point; _phead = NULL; }
需要动态删除每一个节点。
头节点插入元素
void Link::insertHead(int val){ Node *point = new Node(val); point->_pnext = _phead->_pnext; _phead->_pnext = point;}
使用内置节点生成一个节点元素,并将该节点挂在头节点之后。
尾节点插入元素
void Link::insertTail(int val){ Node *point = new Node(val); Node *p = _phead; while (p->_pnext !=NULL) { p = p->_pnext; } p->_pnext = point;}
首先查找尾节点,然后把新节点挂到尾节点之后,新节点就成为了尾节点。
删除链表所有值为val的节点
void Link::deleteNode(int val){ Node *point = _phead; Node *pcur = _phead->_pnext; while (pcur!=NULL) { if (pcur->_data==val) { point->_pnext = pcur->_pnext; delete pcur; pcur = point->_pnext; } point = pcur; if (pcur!=NULL) //如果需要删除的元素是最后一个,则此时的pcur==null,故不能再取_pnext值 { pcur = pcur->_pnext; } }}
首先查找满足条件的节点,最后将该节点删除。并且需要注意最后一个判断。
测试函数
int main(int argc, _TCHAR* argv[]){ Link link; link.show(); link.insertHead(1); link.show(); link.insertHead(2); link.show(); link.insertHead(3); link.show(); link.insertTail(4); link.show(); link.insertTail(5); link.show(); link.insertTail(1); link.show(); link.deleteNode(1); link.show(); return 0;}
运行结果:
欢迎指正!
阅读全文
0 0
- 自定义带头结点的单链表类(C++)----------测试(二)
- 不带头结点的单链表的实现(C语言)
- 带头结点的链队列实现(C语言)
- 带头结点的链队列实现(C语言)
- 带头结点的链队列实现(C语言)
- C语言实现单链表(带头结点)的基本操作
- C语言实现单链表节点的删除(带头结点)
- C语言实现单链表的节点插入(带头结点)
- C语言实现单链表的逆序打印(带头结点)
- C语言实现双向非循环链表(带头结点尾结点)的基本操作
- C语言实现非循环双链表节点的删除(带头结点尾结点)
- C语言实现双向非循环链表(带头结点尾结点)的节点插入
- LinkList_withHeadNode(带头结点的单链表)
- 删除单链表(带头结点)的最小值结点
- 两种链表的合并运算(一种带头结点的,一种不带头结点)
- 两种链表的合并运算(一种带头结点的,一种不带头结点)
- 单链表反转问题(带头结点 和 不带头结点的 创建链表过程等)
- 单链表插入排序(带头结点与不带头结点)
- 采购模块存储过程获取
- information_schema系统表——GLOBAL_STATUS and SESSION_STATUS
- 最优分解(贪心算法)
- mtcnn训练
- C语言之结构体初步了解
- 自定义带头结点的单链表类(C++)----------测试(二)
- iOS 顶部滚动标题视图SGPagingView
- 最新 Spring 4.2.2 集成 Quartz Scheduler 2.2.2 任务调度示例
- jd-gui反编译jar后清除后面的注释信息
- java.text.ParseException: Unparseable date: "Sat Nov 11 00:00:00 CST 2017"
- ES6笔记
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- eclipse *.vm 文件,每次都弹出associate file name with the 'HTML' content type and retry?窗口
- VB.net使用PrintForm打印窗体