解题思路:

注意事项:

参考代码:

#include<stdio.h>

#include<stdlib.h>

typedef struct Node{

    int x;

    struct Node *next;

}node;


void show(node*head)

{

    if(head==NULL)

    {

        printf("Link list is empty");

    }else{

    for(node*p=head;p;p=p->next)

    {

        printf("%d",p->x);

        if(p->next)

        {

            printf(" ");

        }

     } 

    }

}


node *mydelete(node*head,int k)

{

    node*p=head;

    int m=k;

    while(--m>1)

    {

       p=p->next;

    }

    if(p&&k!=1)

    {

    node*temp=p->next;

    p->next=p->next->next;

    free(temp);

    printf("delete OK");

    return head;

    }else if(p&&k==1)

{

node*temp=p;

p=p->next;

free(temp);

printf("delete OK");

return p;

}else{

        printf("delete fail");

        return head;

    }

}


void get(node* head,int k)

{

    node*p=head;

    while(--k>0)

    {

        p=p->next;

    }

    if(p)

    {

    printf("%d",p->x);

    }else{

        printf("get fail");

    }

}


node *insert(node*head,int a,int e)

{

    node*p=head;

    int m=a;

    while(--m>1)

    {

        p=p->next;

    }

    if(p&&a!=1)

    {

        node*q=(node*)malloc(sizeof(node));

        q->x=e;

        q->next=p->next;

        p->next=q;

        printf("insert OK");

        return head;

    }else if(a==1)

{

p=(node*)malloc(sizeof(node));

p->x=e;

p->next=head;

printf("insert OK");

return p;

}else{

        printf("insert fail");

        return head;

    }

}

int main()

{

    int n;

    scanf("%d",&n);

    int a[100];

    node*head=NULL;

    for(int i=0;i<n;i++)

    {

        scanf("%d",&a[i]);

    }

    for(int i=n-1;i>=0;i--)

    {

        node*p=(node*)malloc(sizeof(node));

        p->x=a[i];

        p->next=NULL;

        if(head)

        {

            node*last=head;

            while(last->next)

            {

                last=last->next;

            }

            last->next=p;

        }else{

            head=p;

        }

    }

    //build finished;

    int word;

    scanf("%d",&word);

    for(int i=0;i<word;i++)

    {

        char s[50];

        scanf("%s",s);

        switch(s[0]){

            case 's':

            {

                show(head);

                printf("\n");

                break;

            }

            case 'd':

            {

                int k;

                scanf("%d",&k);

                head=mydelete(head,k);

                printf("\n");

                break;

            }

            case 'g':

            {

                int k;

                scanf("%d",&k);

                get(head,k);

                printf("\n");

                break;

            }

            case 'i':

            {

                int r,j;

                scanf("%d %d",&r,&j);

                head=insert(head,r,j);

                printf("\n");

                break;

            }

        }

    }

    while(head)

    {

    node*temp=head;

    head=head->next;

    free(temp);

}

    return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论