利用“哨兵”“实现双链表

浪人 等级 752 0 0

下面的代码用一个”哨兵“实现双链表,感觉很简洁,中间也有点绕,暂时实现,供学习之用

static Node list_handle = 
{
    &list_handle,&list_handle,
};


bool addNode(Node* node)
{
    if (node == NULL)
    {
        return false;
    }

    Node* guard = &list_handle;
    node->next = guard;
    node->prev = guard->prev;
    node->prev->next = node;
    node->next->prev = node;

}


void removeNode(Node *node)
{
    if (node == NULL)
    {
        return;
    }

    node->prev->next = node->next;
    node->next->prev = node->prev;
    node->prev = NULL;
    node->next = NULL;
}


void travel()
{
    for (Node *node = list_handle.next;node != &list_handle ; node = node->next)
    {
        //对每个节点所进行的操作,这里只是简单的打印
        cout<< node->data <<""<<endl;
    }
}

使用方法

int _tmain(int argc, _TCHAR* argv[])
{

    Node n1;
    n1.data = 100;

    Node n2;
    n2.data = 200;

    Node n3;
    n3.data = 300;

    addNode(&n1);
    addNode(&n2);
    addNode(&n3);

    travel();

    removeNode(&n2);

    travel();

    return 0;
}
收藏
评论区

相关推荐

C++20 要来了!
867 人赞同了该文章 > C++的新标准又双叒叕要到来了,是的,C++20要来了! ![](https://oscimg.oschina.net/oscnet/8e4ff6050887f791586e74de7d598f8e053.jpg)图片来源:udemy.com 几周前,C++标准委会历史上规模最大的一次会议(180人参会)在美国San Die
C++重载双目运算符(2)(对象与数之间)
有两种方法:(1)采用重载双目运算符方式 (2)1.类型转换函数(将类的对象转换为其他数据类型) 2.转换构造函数(将其他类型转换为类的对象)(仍然要配合重载双目运算符的方式,因为最终实现的是类的两个对象相加) (注意:类型转换函数和转换构造函数不可同时使用,会出现二
gRPC应用C++
1.  gRPC简述 ---------- RPC,远程方法调用,就是像调用本地方法一样调用远程方法。 [gRPC](http://www.oschina.net/p/grpc-framework)是Google实现的一种RPC框架,基于HTTP/2标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表
C和C++函数时的JNI使用区别
Java调用C和C++函数时的JNI使用区别: 注意:jni.h头文件中对于\*\*\*.c  &  \*\*\*.cpp采用不同的定义 在C的定义中,env是一个两级指针,而在C++的定义中,env是个一级指针 C形式需要对env指针进行双重deferencing,而且须将env作为第一个参数传给jni函数 jclass (JNICALL \*
Java初始化List的五种方法
#### 在Java中初始化`List`的五种方法 Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方式。 **方案一、构造`List`后使用`List.add`初始化。** List<String> stringList = new LinkedList<>(); stringList.add("a"); s
SPSS:双向有序的R×C表资料的“趋势卡方”
《[OpenEpi:有序 R×2表资料的线性趋势卡方](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fmp.weixin.qq.com%2Fs%3F__biz%3DMzA3OTk2NDU4MA%3D%3D%26mid%3D2650558322%26idx%3D1%26sn%3De193dec
java入门笔记
System.out.println(); 输出 int 整数类型 不能以数字开头 区分大小写 int a=0 int的范围2的31次方到-2的31次方 21亿左右 2个int型运算后仍为int 除法没有余数14/5=2 %模运算 14%5=4 求余数.
vscode 配置golang环境
go 下载 [https://studygolang.com/dl](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fstudygolang.com%2Fdl),国内下载,国外的被墙了,你懂的 ![](https://oscimg.oschina.net/oscnet/774329e48
VBox 安装 macOS 10.12
安装步骤 ⑴ 下载及解压 macOS 10.12 Sierra Final by TechReviews.rar ⑵ 下载及双击安装 VirtualBox-5.1.6-110634-Win.exe ,默认安装 VirtualBox 在 C:\\Program Files 及继续安装 Oracle\_VM\_VirtualBox\_Exte
C#开源定时回调库PETimer的使用
PETimer ======= PETimer开源项目GitHub地址:[点击跳转](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fgithub.com%2FPlaneZhong%2FPETimer) PETimer ======= 1.双端通用:基于C#语言实现的高效便捷计时器,可
LinkedList
Base:JDK1.8 =========== 1、LinkedList ============ LinkedList 也是一个比较常见的数据结构,链表。在C/C++ 中,链表也是一个典型的线性结构,链表分为单向跟双向的两种链表。在java里面的LinkedList是一个双向的链表。 链表最好的好处就在于来一个数据加一个长度,没有多余的冗余, 也是支
Nginx基本安装
#### Windows安装Nginx 解压:nginx-windows 双击: nginx.exe 能看到nginx欢迎界面说明,nginx安装成功 演示下 nginx做静态服务器 启动Nginx C:\\server\\nginx-1.0.2>start nginx 或 C:\\server\\nginx-1.0.2>nginx.exe
Python+Django+Eclipse开发环境搭建
一.介绍Python和Django的开发环境搭建     首先,从Python官网下载Python-2.7.10,直接双击安装运行。完成后添加环境变量到path:c:\\Python26;c:\\Python26\\Scripts; 这样就可以通过cmd进入命令行,直接输入python命令,会输出类似如下图片 ![](http://static.osc
Python技巧之使用多个集合进行关键字传参
Python 3.5+ 允许在函数单次调用中使用多个集合进行关键字传参。语法为在变量前使用双星号“\*\*”。 # Python 3.5+ allows passing multiple sets # of keyword arguments ("kwargs") to a # function within a single ca
StickEngine
整体概述是 [https://my.oschina.net/kkkkkkkkkkkkk/blog/3190865](https://my.oschina.net/kkkkkkkkkkkkk/blog/3190865) 引入C#是为了降低开发难度,特别是战斗服部分,相比使用lua具有高性能,双端开发等优势。 引擎主体还是C/C++实现。这一点和Unity就