解题思路:一点一点测试,一点一点来

注意事项:慢慢把思路理清就行

参考代码:

#include <iostream>
#include <algorithm>
#include <string>
#include <cstring>
using namespace std;
struct node 
{
	int data;
	node* next; 
};
int x,y,n,m;
string s;
//创建链表 
node* create(int n)
{
	node *head,*p;
	head=new node;
	head->next=NULL;
	while(n--){
		cin>>x;
		p=new node;
		p->data=x;
		p->next=head->next;
		head->next=p;
	}
	return head;
}
//展示链表各元素的值 
void show(node* head)
{
	int flag=0;
	node* p=head;
	p=p->next;
	if(p==NULL){
		cout<<"Link list is empty"<<endl;
		return ;
	}
	while(p!=NULL){
		//flag=1;
		cout<<p->data<<" ";
		p=p->next;
	}
	cout<<endl;
}
//删除第t个结点 
int del(node* head,int t)
{
	if(t<=0) return 0;
	int flag=0;
	node* p=head;
	node* q;
	//p=p->next;
	int cnt=1;
	while(p!=NULL){
		if(cnt==t){
			q=p->next;
			p->next=q->next;
			flag=1;
			break;
		}else{
			p=p->next;
			//t--;
			cnt++;
		}
	}
	return flag;
}
//在第pos个位置添加值为value的结点 
int insert(node* head,int pos,int value)
{
	if(pos<=0) return 0;
	int flag=0;
	node* p=head;
	node* q;
	//p=p->next;
	int cnt=1;
	while(p!=NULL){
		if(cnt==pos){
			q=new node;
			q->data=value;
			q->next=p->next;
			p->next=q;
			flag=1;
			break;
		}else{
			p=p->next;
			//t--;
			cnt++;
		}
	}
	return flag;
}
//获取第t个结点的值 
int get(node* head,int t)
{
	if(t<=0) return 0;
	int flag=0;
	node* p=head;
	node* q;
	p=p->next;
	int cnt=1;
	while(p!=NULL){
		if(cnt==t){
			return p->data;
			//flag=1;
			//break;
		}else{
			p=p->next;
			//t--;
			cnt++;
		}
	}
	return flag;
}
void test()
{
	int a[5]={1,2,3,4,5};
	node* head=create(5);
	show(head);
	cout<<del(head,3)<<endl;
	show(head);
	cout<<insert(head,1,1000)<<endl;
	show(head);
	cout<<insert(head,2,555)<<endl;
	show(head);
	cout<<get(head,1)<<endl;
	show(head);
}
int main()
{
	while(cin>>n){
		node* head=create(n);
		//show(head);
		cin>>m;
		while(m--){
			cin>>s;
			if(s[0]=='s'){
				show(head);
				//else cout<<"Link list is empty"<<endl;
				//show(head);
			}else if(s[0]=='d'){
				cin>>x;
				if(del(head,x)){
					cout<<"delete OK"<<endl;
				}else{
					cout<<"delete fail"<<endl;
				}
			}else if(s[0]=='i'){
				cin>>x>>y;
				if(insert(head,x,y)){
					cout<<"insert OK"<<endl;
				}else{
					cout<<"insert fail"<<endl;
				}
			}else if(s[0]=='g'){
				cin>>x;
				if(get(head,x)){
					cout<<get(head,x)<<endl;
				}else{
					cout<<"get fail"<<endl;
				}
			}
		}
	}
	return 0;
}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论