解题思路:
注意事项:
参考代码:
#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分
1 人评分