#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
typedef struct node
{
//struct node* prev;//前一个结点
int data;
struct node* next;//下一个结点
}*PNODE, NODE;
PNODE create(int data)
{
PNODE p = (PNODE)malloc(sizeof(NODE));//定义一个结点
//p->prev = NULL;
p->data = data;
p->next = NULL;
return p;
}
PNODE header;//头结点
PNODE ender;//尾结点
void add(PNODE node)//尾部追加
{
if (header == NULL)//空表
{
header = node;
ender = node;
return;
}
ender->next = node;
ender = node;
}
void insert_behind(int index, PNODE node)//index 下标,node 新结点
{
PNODE p = header;//开始指向头结点
if (header == NULL)//头结点为空
{
add(node);
return; //if中使用return,提前结束函数执行
}
for (int i = 0; i < index && p != NULL; i++)
{
p = p->next;
}
if (p == NULL)//p超过范围,调用add函数,加到最后位置
{
add(node);
return;
}
//在p的后面插入
node->next = p->next;
p->next = node;
if (node->next == NULL)//当新结点被插到最后,尾结点就是node;
{
ender = node;
}
}
void remove_index(int index)
{
//1.寻找位置的过程
PNODE p = header;
PNODE q = NULL;
if (index == 0)
{
if (header->next == NULL)
{
free(header);
header = NULL;
}
else
{
header = header->next;
free(p);
}
return;
}
for (int i = 0; i < index; i++)
{
q = p;//2. q跟着p
p = p->next;
}
q->next = p->next;
free(p);//3.释放
//判断q ->next 是不是尾部结点
if (q->next == NULL)
{
ender = q;
}
}
int main()
{
ender = header = NULL;
add(create(1));//0
add(create(2));//1
add(create(3));//2
add(create(4));//3
insert_behind(2, create(666));
remove_index(2);//想要删除某个下标的数据结点
{
PNODE p = header;
while (p != NULL)
{
printf("%d\n", p->data);
p = p->next;
}
}
return 0;
}