c语言编程,简单点。建立一个单向链表,完成插入和删除,输出相操作后结果。

2024-11-19 23:38:29
推荐回答(1个)
回答(1):

只有1个成员的结构组成链表,功能:创建链表、增加节点、删除节点、打印链表。

#include 
#include 
typedef struct stt
{
    char c;
    struct stt *next;
}STT;
void prfSTT(STT *sttHead)//打印链表
{
    while(sttHead->next!=NULL)
    {
        printf("%c",sttHead->next->c);
        sttHead=sttHead->next;
    }
    printf("\n");
}
STT *getSTTS()//创建链表返回首节点
{
    char c;
    STT *newSTT=NULL,*stt0=NULL,*headTail=NULL;
    printf("输入一组字符组成链表:(回车结束输入)\n");
    while(1)
    {
        c=getchar();
        if(c=='\n')
            break;
        newSTT=(STT *)malloc(sizeof(STT));
        newSTT->c=c;
        newSTT->next=NULL;
        if(stt0==NULL)
            stt0=newSTT;
        else
           headTail->next= newSTT;
        headTail=newSTT;
    }
    return stt0;
}
int deleteSTT(STT *sttHead)//删除节点 返回1删除成功, 返回0删除失败
{
    int i=0,cont=0;
    STT *sttLast=NULL,*sttNext=NULL;
    printf("输入要删除第几个节点:");
    scanf("%d",&cont);
    if(cont==1)
    {
        sttNext=sttHead->next->next;
        sttHead->next->next=NULL;
        free(sttHead->next);
        sttHead->next=sttNext;
        return 1;
    }
    while(sttHead->next!=NULL)
    {
        i++;
        if(i==cont-1)
            sttLast=sttHead->next;
        if(i==cont)
        {
            sttNext=sttHead->next->next;
            sttHead->next->next=NULL;
            free(sttHead->next);
            sttLast->next=sttNext;
            return 1;
        }
        sttHead=sttHead->next;
    }
    return 0;
}
int insertSTT(STT *sttHead)//输入超出链表长度,将插入到链表最后位置。输入0则插入在首节点位置。 返回1插入指定位置成功,返回0未找到指定位置插入在最后
{
    int i=0,cont=0;
    STT *newSTT=NULL;
    newSTT=(STT *)malloc(sizeof(STT));
    newSTT->next=NULL;
    printf("给新的节点输入一个字符:");
    scanf("%c",&(newSTT->c));
    printf("输入要插入在第几个节点后面:");
    scanf("%d",&cont);

    while(sttHead->next!=NULL)
    {
        i++;
        if(cont==0)
        {
            newSTT->next=sttHead->next;
            sttHead->next=newSTT;
            return 1;
        }
        if(i==cont)
        {
            newSTT->next=sttHead->next->next;
            sttHead->next->next=newSTT;
            return 1;
        }
        sttHead=sttHead->next;
    }
    sttHead->next=newSTT;
    return 0;
}
int main()
{
    STT *sttHead=NULL;
    sttHead=(STT *)malloc(sizeof(STT));
    sttHead->next=getSTTS();
    printf("\n输入的链表为:\n");
    prfSTT(sttHead);

    printf("\n---开始插入---\n");
    insertSTT(sttHead);
    printf("插入后的链表为:\n");
    prfSTT(sttHead);

    printf("\n---开始删除---\n");
    if(deleteSTT(sttHead))
    {
        printf("删除后的链表为:\n");
        prfSTT(sttHead);
    }
    else
        printf("删除失败!节点不存在!\n");
    return 0;
}