关于双链表的一些简单功能的实现
区别于单链表的无非就是添加节点 删除节点 稍微麻烦一点。
需要注意的则是: 添加节点的时候, 先处理待添加节点的前驱和后继 , 再处理前一个节点的后继 和 后一个节点的前驱
删除节点的时候, 注意删除首节点时, 下一个节点的前驱为NULL 删除后继时,前一个节点的后继为NULL
双链表的简单功能
/*双链表的实现*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Dblink
{
int data; //数据域
struct Dblink *prv; //指向前驱节点
struct Dblink *next; //指向后继节点
}Node;
int Empty(Node *head); //判空
void Print(Node *head); //打印
void TransPrint(Node *head); //反向打印
void CreateNode(Node **p, int data); //创建节点
void Add(Node **head, int data); //向链表尾部添加节点
Node *FindPosNode(Node *head, int pos); //根据位置找节点, 没有返回NULL
Node *FindDataNode(Node *head, int data); //根据data找第一个节点, 没有返回NULL
void Insert(Node **head, int data); //某个节点前插入(包括头插)
int GetToatalNode(Node *head); //获取节点总数
void DeleteNode(Node **head, int data); //删除内容为data的节点
void FreeAll(Node **head); //销毁链表
函数实现部分