有头链表 1

#include<stdio.h>
#include<stdlib.h>
struct Node
{
int date;
struct Node next;
};
struct Node
cendhead()
{
struct Node headnode = (struct Node )malloc(sizeof(struct Node));
headnode->next = NULL;
return headnode;
};
struct Node cendnode(int date)
{//创建节点的函数,把别人的数据变成节点的磨样
struct Node newnode = (struct Node)malloc(sizeof(struct Node)); //申请内存不对,导致释放问题
newnode->date = date;
newnode->next = NULL;
return newnode;
};
void inserthead(struct Node
headnode,int date)
{//表头插入
struct Node
newnode = cendnode(date);
newnode->next = headnode->next;
headnode->next = newnode;
}
//函数封装打印
void printlist(struct Node
headnode)
{
struct Node pmove = headnode->next;
while (pmove!=NULL)
{
printf("%d\t", pmove->date);
pmove = pmove->next;
}
printf("\n");
}
//查找节点
struct Node
searchdate(struct Nodeheadnode, int date)
{
struct Node
pmove = headnode->next;
while (pmove!=NULL&&pmove->date!=date)
{
pmove = pmove->next;//以此循环
}
return pmove;
}

//删除节点 需要两个节点,找指定位置,和指定位置的左边的节点
void deletenode(struct Node headenode,int psodate )
{
struct Node
psonodeleft = headenode;//左边的作为头
struct Node* psonode = headenode->next;//右边的赋值给下一个节点
while (psonode != NULL&&psonode->date!= psodate)
{
psonodeleft = psonode;
psonode = psonode->next;
}
if (psonode == NULL)
{
printf(“未找到该位置,无法删除”);
return;
}
else
{
psonodeleft->next = psonode->next;
//左边节点的指针,指向右边节点的指针
free(psonode);
psonode = NULL;
printf(“删除成功!\n”);
}
}
//删除所有相同的数据
void deleteall(struct Node* headnode, int date)
{
while (searchdate(headnode, date) != NULL);//查找是否又要删除的数据
{
deletenode(headnode, date);//进行删除
}
}
//插入节点 先找到表尾,然后进行插入
void insernode(struct Node* headnode, int date)
{
struct Nodenewnode = cendnode(date);
struct Node
tailnode = headnode;

}
int main()
{ //有头链表:莫一种结构的单一个体
struct Node* list = cendhead();
for (int i = 0; i < 3; i++)
{
inserthead(list,i);
}
printlist(list);
deletenode(list, 1);
printlist(list);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值