题目描述
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; }