1. 单向链表新增、删除
typedef int datatype;
//创建节点结构体
typedef struct Node
{
//数据域:存储数据元素
datatype data;
//指针域:存储下一个节点的地址
struct Node *next;
}*Linklist;
/*
* function: 创建一个节点
* @param [ in]
* @param [out]
* @return 成功返回节点的地址,失败返回NULL
*/
Linklist create_node()
{
Linklist s=(Linklist)malloc(sizeof(struct Node));
if(NULL==s)
return NULL;
//成功
//s节点的数据域清0
s->data=0;
//s节点的指针域指向NULL
s->next=NULL;
return s;
}
/*
* function: 尾插
* @param [ in]
* @param [out] 插入的值 头指针
* @return 返回头指针
*/
Linklist insert_rear(datatype element,Linklist head)
{
//创建新节点s
Linklist s=create_node();
if(NULL==s)
return head;
s->data=element;
//1,判断链表为空
if(NULL ==head)
{
head=s;
}
else //链表不为空
{
//1,循环到最后一个节点
Linklist p=head;
while(p->next!=NULL)
{
p=p->next;
}
//2,在p后面插入s
p->next=s;
}
return head;
}
/*
* function: 尾删
* @param [ in]
* @param [out] 头指针
* @return 返回头指针
*/
Linklist delete_rear(Linklist head)
{
//1,判断链表为空
if(NULL ==head)
return head;
//2,判断链表只有一个节点
if(NULL ==head->next)
{
free(head);head=NULL;
}
else //存在多个节点>=2
{
//3.找到倒数第2个节点
Linklist del=head;
while(del->next->next!=NULL)
{
del=del->next;
}
//4.删除del->next
free(del->next);
del->next=NULL;
}
return head;
}
2. 双向链表新增、删除
typedef char datatype[30];//datatype-->char [30]
//定义结构体
typedef struct Node
{
//数据域:存储数据元素
datatype data;
//指针域:存储下一个节点的地址
struct Node *next;
//指针域:存储上一个节点的地址
struct Node *priv;
}*Doublelink;
/*
* function: 创建节点
* @param [ in]
* @param [out]
* @return 成功返回首地址 失败返回NULL
*/
Doublelink create_node()
{
Doublelink s=(Doublelink)malloc(sizeof(struct Node));
if(NULL==s)
return NULL;
//成功
strcpy(s->data,"");
s->next=s->priv=NULL;
return s;
}
/*
* function: 双向链表头插
* @param [ in]
* @param [out] 值,头指针
* @return 返回头指针
*/
Doublelink double_insert_head(datatype element,Doublelink head)
{
//创建新节点s
Doublelink s=create_node();
if(s==NULL)
return head;
strcpy(s->data,element);
//1.判断链表为空
if(NULL ==head)
head=s;
//2.存在多个节点>=1
else
{
s->next=head;
head->priv=s;
head=s;
}
return head;
}
/*
* function: 头删
* @param [ in]
* @param [out]
* @return
*/
Doublelink delete_head(Doublelink head)
{
//1,判断链表为空
if(NULL==head)
return head;
//2,存在多个节点
Doublelink q=head;
head=head->next;
if(head!=NULL)
head->priv=NULL;
free(q);
q=NULL;
return head;
}