西南科技大学OJ题 单链表的插入操作的实现0952

单链表的插入操作的实现

建立长度为n的单链表,在第i个结点之前插入数据元素data。

输入

第一行为自然数n,表示链式线性表的长度;
第二行为n个自然数表示链式线性表各元素值;
第三行为指定插入的位置i;第四行为待插入数据元素data。

输出

指定插入位置合法时候,输出插入元素后的链式线性表的所有元素,元素之间用一个空格隔开。输入不合法,输出"error!"。

样例输入

5
1 2 3 4 5
3
6

样例输出

1 2 6 3 4 5

#include<stdio.h>
#include<malloc.h>
struct LinkNode
{
    int data;
    struct LinkNode* next;
};

struct LinkNode *Create(int n)
{
    struct LinkNode *head,*p1,*p2;
    head=p1=p2=(struct LinkNode*)malloc(sizeof(struct LinkNode));
    for(int i=1;i<n;i++)
    {
        scanf("%d",&p1->data);
        p1->next=(struct LinkNode*)malloc(sizeof(struct LinkNode));
        p1=p2;
    }
    scanf("%d",&p1->data);
    p1->next=NULL;
    return head;
}

bool ListInsert(struct LinkNode *&head,int i,int n)
{
    struct LinkNode *p,*s;
    p=head;
    if(i<=0||i>n) return false;
    else
    {
        if(i==1)
        {
            s=(struct LinkNode*)malloc(sizeof(struct LinkNode));
            scanf("%d",&s->data);
            s->next=p;
            head=s;
        }
        else
        {
            for(int j=0;j<i-2;j++)
            {
                p=p->next;
            }
            s=(struct LinkNode*)malloc(sizeof(struct LinkNode));
            scanf("%d",&s->data);
            s->next=p->next;
            p->next=s;
        }
        return true;
    }
    
}

int main()
{
    int n;
    int i;
    struct LinkNode *head,*p;
    scanf("%d",&n);
    head=Create(n);
    scanf("%d",&i);
    if(ListInsert(head,i,n))
    {
        p=head;
        while(p!=NULL)
        {
            printf("%d ",p->data);
            p=p->next;
        }
    }
    else
    {
        printf("error!");
    }
}
/*
#include<stdio.h>
int main()
{
    int n,a[100],i,data;
    scanf("%d",&n);
    for(int j=0;j<n;j++)
    {
        scanf("%d",&a[j]);
    }
    scanf("%d %d",&i,&data);
    if(i<=0||i>n)
    printf("error!");
    else
    {
        for(int j=0;j<n;j++)
        {
            if(j==i-1)
            {
                for(int k=n;k>j;k--)
                {
                    a[k]=a[k-1];
                }
                a[j]=data;
                break;
            }
        }
        for(int j=0;j<=n;j++)
        {
            printf("%d ",a[j]);
        }
    }
}
*/

猜你喜欢

转载自blog.csdn.net/qq_40593308/article/details/82559670
今日推荐