#include<stdio.h>
#include<stdlib.h>
struct Node{
int data;
struct Node *next;//结构体指针
};
struct Node* createlist()//创建链表
{
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));//开辟空间
headNode->next=NULL;//头指针指向NULL
return headNode;
}
struct Node* createNode(int data)//创建结点
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data=data;//记录数据
newNode->next=NULL;//结点指针指向NULL
return newNode;
}
void printlist(struct Node* headNode)//打印链表
{
struct Node* pMove = headNode->next;//需要一个新的指针结构体移动来输出
while (pMove)//pMove不为空时,循环继续
{
printf("%d\t",pMove->data);//输出
pMove = pMove->next; //指向下一个
}
printf("\n");
}
void insertNodeByHead(struct Node* headNode,int data)//插入结点
{
struct Node* newNode = createNode(data);//把数据存入一个结点中
newNode->next = headNode->next;//新结点的指针 指向 插入位置结点的指针指向的位置
headNode->next = newNode; //插入位置结点的指针 指向 新结点
}
void deleteNodeByAppoin(struct Node* headNode,int posData)//删除结点 (从头开始)
{
struct Node* posNode = headNode->next;//找到要删除的结点
struct Node* posNodeFront = headNode;//找到要删除的前一个结点
if(posNode == NULL)//删除结点不存在
{
printf("无法删除,链表为空\n");
}
else
{
while(posNode->data != posData) //直到找到要删的数据
{
posNodeFront = posNode; // 向后移一个
posNode = posNodeFront->next; // 向后移一个
if(posNode == NULL){ // 为空不存在
printf("无法删除,链表为空\n");
return ;
}
}
posNodeFront->next = posNode->next;//前一个结点指针直接指向删除结点后的结点
free(posNode);//释放删除结点
}
}
int main(){
struct Node* list = createlist();
insertNodeByHead(list,1);
insertNodeByHead(list,2);
insertNodeByHead(list,3);
printlist(list);
deleteNodeByAppoin(list,2);
printlist(list);
system("pause");
return 0;
}
2021-5-26【单链表】【结构体】【含注释】
最新推荐文章于 2023-07-11 15:02:00 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)