单链表(带头结点)的插入

题目描述

1.问题描述

单链表初始为空,给定插入位置和数据,插入结点实现单链表的创建。假设单链表中的结点计数从1开始。

2.算法

单链表结点的存储结构包含两部分:数据、下一结点指针

单链表的查找:给出位置i,若第i个结点存在(1<=i<=表中结点数L),返回结点地址;否则,返回NULL。

单链表的插入:给出位置i和数据e,在单链表第i(1<=i<=L+1)个结点位置插入新结点,数据为e。

输入

测试次数n

每行一组测试数据,格式如下:

位置i 数据e

输出

对每组测试数据,调用插入函数在位置i插入数据e,若插入成功,输出当前链表中的数据;若插入不成功,输出error。

样例输入

8
0 10
1 10
2 20
3 30
1 40
6 60
5 50
9 100

样例输出

error
10
10 20
10 20 30
40 10 20 30
error
40 10 20 30 50
error

代码实现:

//
// Created by HP on 2018/3/9.
//
#include <iostream>
using namespace std;
struct node{
    int num;
    node *next;
};
int n;
void ShowList(node *head)
{
    int temp=n;
    node *display=head->next;
    while(display){
        temp--;
        cout<<display->num;
        if(temp>0)
            cout<<" ";
        display=display->next;
    }
    cout<<endl;
}
int check(node *head,int dn)
{
    node *finder=head;
    int i;
    for(i=0;finder!=NULL;i++)
        finder=finder->next;
    if(dn<=0||dn>i)
        return 0;
    else
        return 1;
}
node *Find(node *head,int dn)
{
    int i=0;
    node *finder=head;
    while(i<dn){
        finder=finder->next;
        i++;
    }
    return finder;
}
void insetlist(node *head,int dn,int data)
{
    n++;
    node *inset=Find(head,dn-1);
    node *inset_data=new node;
    inset_data->num=data;
    inset_data->next=inset->next;
    inset->next=inset_data;
}
int main()
{
    int t;
    n=0;
    node *head=new node;
    head->next=NULL;
    cin>>t;
    while(t--){
        int dn,data;
        cin>>dn>>data;
        if(check(head,dn)){
            insetlist(head,dn,data);
            ShowList(head);
        }
        else
            cout<<"error"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zzzzhdx/article/details/79510222