//2020年湖南对口计算机35题。下面程序中定义了三个函数,其功能分别是添加链表结点,显示链表结点与删除链表结点。
//如果添加的链表结点数据为“11,22,33,44,55”,则显示链表为“11->22->33->44->55->End”。如果删除数据为33的结点,
//则显示链表为 “11->22->44->55->End”。请补充程序。
#include <stdio.h>
#include <stdlib.h>
struct Node{
int data;
struct Node *next;
};
typedef struct Node List;
List *AppNode(List *head);//添加结点
void DisNode(List *head);//显示结点
List *DelNode(List *head,int nodeData);//删除结点
int main() {
int i=0;
List *head=NULL;
for(i=0;i<5;i++)
head=AppNode(head);
DisNode(head);
DelNode(head,33);//删除数据为33的结点
DisNode(head);
return 0;
}
List *AppNode(List *head)
{
List *p=NULL;
List *pr=head;
int data;
p=(List *)malloc(sizeof(List));
if(p==NULL){
printf("No enough memory!");
exit(0);
}
if(head==NULL)
head=p;
else{
while(pr->next!=NULL)
pr=pr->next;
pr->next=p;
}
pr=p;
printf("input node data:");
scanf("%d",&data);
pr->data=data;
pr->next=NULL;
return head;
}
void DisNode(List *head)
{
List *p=head;
while(p!=NULL)
{
printf("%d-> ",p->data);
p=p->next;
}
printf("End!\n");
}
List *DelNode(List *head,int nodeData){
List *p=head,*pr=head;
if(head==NULL){
printf("No Linked Table!\n");
return(head);
}
while(nodeData!=p->data&&p->next!=NULL){
pr=p;
p=p->next;
}
if(p->data==nodeData){
if(p==head)
head=p->next;
else
pr->next=p->next;
free(p);
}else
printf("The Node has not found!");
return head;
}