解题思路: p2 保持在p1前面 ,移动p2,进行操作
注意事项:
参考代码:
#include <stdio.h>
#include <stdlib.h>
#define len sizeof(num)
typedef struct s{
int data;
struct s *pre;
struct s *next;
}num;
num *insert (num *h,int j,int e){
num *p1,*p2,*p; //p1在p2前面
p=(num *)malloc(len);
p->data=e;
p->next=NULL;
p->pre=NULL;
p2=h;
if (h==NULL){
return p;
}
int n=1;
while (p2){
if (n==j){
if (p2==h){
p->next=h;
h->pre=p;
h=p;
}else{
p1->next=p;
p->next=p2;
p->pre=p1;
p2->pre=p;
}
break;
}else{
p1=p2;
}
p2=p2->next;
n++;
}
if (p2==NULL){
p1->next=p;
p->pre=p1;
}
return h;
}
num *delet(num *h,int j){
num *p1,*p2;
p2=h;
int n=1;
while (p2){
if (n==j){
if (p2==h){
h=h->next;
}else{
p1->next=p2->next;
p2->pre=p1;
}
}else{
p1=p2;
}
p2=p2->next;
n++; //记录第几个数
}
return h;
}
void display(num *h){
num *i;
for (i=h;i;i=i->next){
printf ("%d ",i->data);
}
printf ("\n");
}
int main (){
int n;
int j,e;
num *h=NULL;
while(scanf ("%d",&n)!=EOF){
if (n==0){
display(h);
}else if (n==1){
scanf ("%d %d",&j,&e);
h=insert(h,j,e);
}else if (n==2){
scanf ("%d",&j);
h=delet(h,j);
}
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复