解题思路:
这里提供都插法。
所谓头插法就是我们建立一个空的节点来充当头部。这样建立的好处有利于本题的插入与删除。具体思路看我代码的注释
注意事项:
我们要注意的是但插入与删除节点是否在我们链表的范围。
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int num;
//这里pnext,pfront分别代表该节点指向后一个节点和前一个节点
struct stu *pnext,*pfrond;
}stu;
int creat(int n,int a,int k,stu *phead,int length)
{
stu *pnew=NULL,*pend=NULL,*pm;
//同样的在这里我们分n的三种情况
if(n==0){
//当n=0时,我们只需要遍历输出就好了
pnew=phead->pnext;
while(pnew!=phead){
printf("%d ",pnew->num);
pnew=pnew->pnext;
}
printf("\n");
//因为我们输出length没变所以返回length就好了
return length;
}else if(n==1){
if(a>length+1)return length;
//当我们插入一个节点时,是不是插入的位置最大只能在最大长度的后一个位置
pnew=phead;
int m=1,j;
while(1){
//这里我们遍历到插入节点的位置
//这里我们同样分为两种情况,第一种就是当第一次插入节点时和第二次插入
if(m==a){
pm=(stu*)malloc(sizeof(stu));
pm->num=k;
if(pnew->pnext==NULL){
pm->pfrond=pnew; //第一次
pnew->pfrond=pm;
pnew->pnext=pm;
pm->pnext=pnew;
}else{
pm->pfrond=pnew;
pm->pnext=pnew->pnext; //第二次及第二次以上
pend=pnew->pnext;
pend->pfrond=pm;
pnew->pnext=pm;
}
return length+1; //我们没成功插入一个节点length的长度加一
}
pnew=pnew->pnext;
m++;
}
}else if(n==2){
//这里删除节点同样分为两种情况
//第一种,就是删除的节点在我们链表的范围之内
//第二种,就是不在我们链表的范围,此时就不需要删除节点了
if(n>length)return length; //没成功删除长度不变
int i;
pnew=phead;
for(i=1;i<=a;i++){
pnew=pnew->pnext;
}
pm=pnew->pfrond;
pend=pnew->pnext;
pm->pnext=pend;
pend->pfrond=pm;
free(pnew);
return length-1; //成功删除长度减一
}
}
int main()
{
int n,a,k,length=0;
a=0,k=0;
stu *phead;
//定义一个头部的地址
phead=(stu*)malloc(sizeof(stu));
phead->pfrond=phead->pnext=NULL;
//这里输入n,依题目可分为三种情况。1、n=0, 2、n=1, 3.n=2
while(scanf("%d",&n)!=EOF){
if(n==1){
scanf("%d%d",&a,&k);
}else if(n==2){
scanf("%d",&a);
}
length=creat(n,a,k,phead,length);
//这里函数creat的参数大致是这样设定的
//当n=1时,我们这后面的a,k就代表了题目中的情况
//当n=0时,我们虽然传了值进去,但在这里根据题目要求我们不使用它
//当n=2是,我们k就没有用处就和n=0是a,k不使用类似
//phead代表头部地址,length代表我们现在链表的单位长度,这里头部不计长度
}
return 0;
}
0.0分
1 人评分
C语言训练-求素数问题 (C语言代码)浏览:989 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:849 |
printf基础练习2 (C语言代码)浏览:605 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:583 |
DNA (C语言代码)浏览:564 |
1642题解浏览:784 |
C语言训练-亲密数 (C语言描述,反正怎么都能对)浏览:2256 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:567 |
时间转换 (C语言代码)浏览:697 |
三进制小数 (C语言代码)浏览:903 |