解题思路: 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++代码)浏览:1173 |
多输入输出练习1 (C语言代码)浏览:1219 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:603 |
C语言程序设计教程(第三版)课后习题8.6 (C语言代码)浏览:631 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:541 |
淘淘的名单 (C语言代码)浏览:1167 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:636 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:760 |
1024题解浏览:879 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:569 |