2020对口计算机35题


//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!
");
}
List *DelNode(List *head,int nodeData){
    List *p=head,*pr=head;
    if(head==NULL){
        printf("No Linked Table!
");
        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;
}

 
原文地址:https://www.cnblogs.com/yanglike111/p/13711991.html