C++实现简易单向链表
#include <iostream>
#include <stdlib.h>
#include <stdbool.h>
using namespace std;
//结点
class Node
{
public:
int data;
Node* next;
Node(int d)
{
data = d;
next = NULL;
}
};
//链表
class List
{
Node* head;
public:
List()
{
head =NULL;
}
void init(Node *p)
{
head = p;
}
//插入
void insert(Node* p)
{
p -> next = head;
head = p;
}
//删除
Node* delete_node(Node* p)
{
Node** pnext;
for(pnext = &head;*pnext;pnext = &(*pnext) ->next)
{
if(*pnext == p)
{
*pnext = p -> next;
return p;
}
}
return NULL;
}
//遍历链表
/*void trave_list(Node* p)
{
for(p = head;p;p = p ->next)
{
cout<< p->data << endl;
}
}*/
//查找
Node* search_list(int key)
{
Node* p;
p =head;
while(p)
{
if(p->data == key)
{
cout << "----" << p->data << "----" << endl;
return p;
}
p = p->next;
}
return NULL;
}
//销毁链表
void destroy()
{
Node* p;
Node* q;
for(p = head;p;)
{
q = p -> next;
delete p;
p = q;
}
head = NULL;
}
friend ostream& operator << (ostream& os,List& list);
};
//遍历并打印
ostream& operator << (ostream& os,List& list)
{
Node *p;
for(p = list.head;p;p = p ->next)
{
cout<< p->data << " ";
}
return os;
}
int main()
{
List list;
Node *p;
for(int i =0;i<10;i++)
{
p = new Node(i);
list.insert(p);
}
p = list.search_list(5);//在链表中找到结点
Node* t = list.delete_node(p);//把结点移除
list.delete_node(t);//释放结点空间
//list.trave_list(p);
cout<< list << endl;//遍历并打印
list.destroy();//销毁
return 0;
}
C++实现简易单向链表的更多相关文章
- Reverse Linked List II 单向链表逆序(部分逆序)
0 问题描述 原题点击这里. 将单向链表第m个位置到第n个位置倒序连接.例如, 原链表:1->2->3->4->5, m=2, n =4 新链表:1->4->3-& ...
- 【编程题目】输入一个单向链表,输出该链表中倒数第 k 个结点
第 13 题(链表):题目:输入一个单向链表,输出该链表中倒数第 k 个结点.链表的倒数第 0 个结点为链表的尾指针.链表结点定义如下: struct ListNode {int m_nKey;Lis ...
- 输出单向链表中倒数第k个结点
描述 输入一个单向链表,输出该链表中倒数第k个结点,链表的倒数第0个结点为链表的尾指针. 链表结点定义如下: struct ListNode { int m_nKey; ListNode* ...
- Linus:利用二级指针删除单向链表
Linus大神在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针的例子,解释了什么才是core low-level codi ...
- 【转】Linus:利用二级指针删除单向链表
原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...
- C语言实现单向链表及其各种排序(含快排,选择,插入,冒泡)
#include<stdio.h> #include<malloc.h> #define LEN sizeof(struct Student) struct Student / ...
- 数据结构——Java实现单向链表
结点类: /** * @author zhengbinMac * 一个OnelinkNode类的对象只表示链表中的一个结点,通过成员变量next的自引用方式实现线性表中各数据元素的逻辑关系. */ p ...
- 输入一个单向链表,输出该链表中倒数第K个结点
输入一个单向链表,输出该链表中倒数第K个结点,具体实现如下: #include <iostream> using namespace std; struct LinkNode { publ ...
- 单向链表JAVA代码
//单向链表类 publicclassLinkList{ //结点类 publicclassNode{ publicObject data; ...
随机推荐
- 企业级应用,如何实现服务化二(dubbo架构)
这是企业级应用,如何实现服务化系列的第二篇.在上一篇:企业级应用,如何实现服务化一(项目架构演化)中,交代了企业级应用架构的演化过程,和服务治理的方案可以选择:dubbo,或者spring cloud ...
- ZOJ1221 Risk
Description Risk is a board game in which several opposing players attempt to conquer the world. The ...
- Restful API官方文档
理解Restful架构:http://www.ruanyifeng.com/blog/2011/09/restful RESTful设计指南:http://www.ruanyifeng.com/blo ...
- python之函数名,闭包、迭代器
一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") pr ...
- MySQL之select简单使用
Select * from table_name Select column_name_1,column_name_2 from table_name Select * from student wh ...
- 转 如何快速清理 chrom 缓存
谷歌浏览器(Chrome)如何手动清除缓存 听语音 | 浏览:13267 | 更新:2014-05-15 01:00 | 标签:谷歌 chrome 浏览器的缓存可以帮助我们更好地使用一些程序,但时间长 ...
- bio,nio,aio简介
https://mp.weixin.qq.com/s/F9WwcsFdCOwOeeDc0oc98w——<BIO,NIO,AIO 总结>总结和对比这三种的区别 https://www.jia ...
- Rabbitmq~linux环境的部署
之前写过在windows环境上部署rabbitmq,这回介绍在centos上对这个消息中间件进行部署的过程 一 下载和解压 wget http://www.rabbitmq.com/releases ...
- arcgis【0基础 】【1】 中如何添加MXD
1,第一种方法 MapControl 直接添加 if (!axMapControl1.CheckMxFile(FileName)) { MessageBox.Show("文件不合法&quo ...
- I/O————缓存流
为什么要使用缓存流? 当对磁盘访问次数多的时候,字节流和字符流就会感觉性能不佳,速度较慢. 缓存流,一次会读取很多的数据到缓存中,以后每一次读取都是从缓存中读取,直到缓存中数据读取完,这样就减少了io ...