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

浪人 等级 540 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++概述
概述 C 是静态,可编译,通用,大小写敏感,格式自由的编程语言,它支持程序化,面向对象的,和泛型编程方式。 C 被看作是中间层语言,因为它同时包含了低级语言和高级语言的特性。 C 是于 1979 年在新泽西的茉莉山丘的贝尔实验室由 Bjarne Stroustrup 开发的,它是 C 语言的加强版,最开始它被称作 “C with Classes”,但是
C++ 基本语法
C 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 对象具有状态和行为。例如:一只狗的状态 颜色、名称、品种,行为 摇动、叫唤、吃。对象是类的实例。 类 类可以定义为描述对象行为/状态的模板/蓝图。 方法 从基本上说,一个方法表示一种行为。一个类可以包含多个
双指针问题
一、双指针之左右指针相关题目 1.1 题目要求:给定一个升序排列的整数数组,找到两个数,使它们的和等于给定的数,有且仅有一个满足条件的解,返回索引。 题目分析:需要两个指针,一个指向开头,一个指向末尾,然后向中间遍历,如果指向的两个数相加正好等于target的话,直接返回两个指针的位置即可,若小于target,左指针右移一位,若大于target,右
02-Vue入门之数据绑定
02Vue入门之数据绑定 02Vue入门之数据绑定 2.1. 什么是双向绑定? Vue框架很核心的功能就是双向的数据绑定。 双向是指:HTML标签数据 绑定到 Vue对象,另外反方向数
统计字符串中字符出现的次数(Python版)
字符串转list python s 'aabbccd' list1 list(s) 方法一: python list1 'a', 'a', 'b', 'c', 'c', 'c', 'c' dict_cnt {} for value in list1: dict_cntvalue dict_cnt.get(value,
天猫双11数据过于完美?我们用python来看看
↑关注置顶 有趣的不像个技术号 是否真的完美? 双11结束了,大家已经无手可剁 。 天猫官方公布了今年的双11成交额为2684亿元,成
利用“哨兵”“实现双链表
下面的代码用一个”哨兵“实现双链表,感觉很简洁,中间也有点绕,暂时实现,供学习之用 static Node list_handle { &list_handle,&list_handle, }; bool addNode(Node node) { if (node NULL) { return f
c++11 实现单例模式
C11出来后,里面新增加了好多好用的功能 下面的单例就是使用了C11中的标准库中的mutex和unique_prt 进行内存管理的. 此单例模式不用担心内存的释放问题 pragma once include <memory include <mutex template <class T class Singleton { public: ty
我的C语言基础
C语言32个关键字auto 声明自动变量short 声明短整型变量或函数int 声明整型变量或函数long 声明长整型变量或函数float 声明浮点型变量或函数double 声明双精度变量或函数char 声明字符型变量或函数struct 声明结构体变量或函数union 声明共用数据类型enum 声明枚举类型typedef 用以给数据类型取别名co
C语言基础习题50例(一)1-5
虎为百兽尊,罔敢触其怒。惟有父子情,一步一回顾。 习题1 有 1 、 2 、 3 、 4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?实现思路:显然,这个题目需要用到循环,并且是循环嵌套,先列出所有可能的组合,再去掉重复的组合即可。代码如下:cinclude <stdio.hint main(){ int i, j, k,
游戏安全实践的一些思考
移动的游戏能够稳定健康的上线。主要需要依赖以下在四个方面:1.前端展示,或者说客户端正常运行。性能稳定不崩溃,不过热能够稳定运行。2.后端,或者游戏后台服务端的。不但要稳定。还有能在有限的服务器资源下,能承受大量的同时在线用户。而且要让游戏中的每个模块都能够承受承受大量的同时在线用户。3.安全也是重点之中。这既包括客户端,又包括服务端。客户端的安全,包括要防
前端面试系列——Vue面试题
Vue 双向绑定原理 mvvm 双向绑定,采用数据劫持结合发布者订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的 setter、getter,在数据变动时发布消息给订阅者,触发相应的监听回调。 双
windows中 redis server 双击闪退
错误重现bash 进入redis安装目录执行以下命令redisserver.exe redis.windows.conf报错: [19572] 01 May 21:13:17.815 Creating Server TCP listening socket :6379: listen: Unknown error 解决方法:修改 redis.windows
frida调试不了怎么办?着急,在线等!
一、目标frida越来越流行,针对他的检测也越来越多了,什么特征串检测,TracerPid检测,双进程保护。搞的我们茶饭不思,啤酒都不香了。今天的目标是数字壳的调试,双进程保护。 二、步骤 侦测下火力f spawn模式启动App, 提示:frida U f com.asiainfo.app l test.js nopauseProcess crashed
借你一双慧眼, Frida Native Trace
一、目标李老板: 奋飞呀,最近没怎么更新呀?奋飞: 最近的KPI定的合不合理你心里没点AC数?我现在内卷到周三就开始写周报了,不然被新来的就给卷失业了。遥想在古典PC互联网时代,咱也是 OD、IDA 玩的很溜的。一日饮酒乐甚,突发奇想,IDA识别出所有函数,然后导出来给OD,给这些函数下断点,触发之后先打日志,再自动取消断点。这样程序运行的流程不就出来了?实