链表的创建,遍历,查找,删除。
#include <stdio.h>
#include <math.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;
return headNode;
}
struct Node* createaNode(int data)
{
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void printList(struct Node* headNode)//遍历
{
struct Node* pMove = headNode->next;
while(pMove)
{
printf("%d ",pMove->data);
pMove = pMove->next;
}
printf("\n");
}
//插入结点,参数
void insertNodeByHead(struct Node* headNode,int data)
{
//创建插入的结点
struct Node* newNode = createaNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
//删除指定数据
void deleteNode(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();
int n,i,x;
printf("请输入数据个数:\n");
scanf("%d",&n);
printf("请输入数据:\n");
for(i = 1;i <= n;i++)
{
scanf("%d",&x);
insertNodeByHead(list,x);
}
printList(list);
printf("请输入要删除的数据:\n");
while(scanf("%d",&x)!=EOF)
{
deleteNode(list,x);
printList(list);
printf("请输入要删除的数据:\n");
}
return 0;
}