数据结构C语言 单链表(插入、删除、查找)
1、插入
假设_A_的临时指针为 “p” ,C_的临时指针为 “q“。
步骤1: _ 删除这条连接线;
步骤2: 将p->next给q->next;
步骤3: 将q给p->next;
插入代码
q->next = p->next;
p->next = q;
2、删除
假设_A_的临时指针为 “p” ,_B_的临时指针为 “q“。
步骤1: 删除这条连接线;
步骤2: 删除这条连接线;
步骤3: 将p->next给q,接着将q->next给p->next,最后free(q);
删除代码
q = p->next;
p->next = q->next;
free(q);
3、具体代码(插入、删除、查找)
typedef struct node{
int data; //结点的数据域
struct node *next; //结点的指针域
}NODE,*LinkList;
/*
Function: Find_List
Description: 在链表中查找第k个元素,若找到,返回该元素结点的指针;否则,返回空指针。
Others: 查找代码
*/
LinkList Find_List(LinkList L, int k)
{
LinkList p;
int i;
i = 1;
p = L->next;
while(p && i < k)
{
p = p->next;
i++;
}
if(p && i == k)
{
return p;
}
return NULL;
}
/*
Function: Insert_List
Description: 将元素newElem插入到第k-1个元素之后
Others: 插入代码
*/
int Insert_List(LinkList L, int k, int newElem)
{
LinkList p, q; //p,q为临时指针
if(k == 1) //元素newElem插入到第一个元素之前时
{
p = L;
}
else
{
p = Find_List(L, k-1); //查找链表中的第k-1个元素并令p指向该元素结点
}
if(!p) //不存在k-1元素
{
return -1;
}
q = (NODE *)malloc(sizeof(NODE)); //创建新元素的结点空间
if(!q)
{
return -1;
}
// 元素newElem插入第k-1个元素之后
q->data = newElem;
q->next = p->next;
p->next = q;
return 0;
}
/*
Function: Delete_List
Description: 删除第k个元素
Others: 删除代码
*/
int Delete_List(LinkList L, int k)
{
LinkList p, q; //p,q为临时指针
if(k == 1) //元素newElem插入到第一个元素之前时
{
p = L;
}
else
{
p = Find_List(L, k-1); //查找链表中的第k-1个元素并令p指向该元素结点
}
if(!p || !p->next) //不存在第k个元素
{
return -1;
}
//删除第k个元素
q = p->next;
p->next = q->next;
free(q);
return 0;
}