无头结点单链表删除结点问题
要实现删除一个没有头结点的单链表中删除第i个之后的连续k个结点,下面是我写的代码,头一次接触数据结构,好像在用键盘输入创建单链表的地方很乱,劳烦大家看看,给我指指问题吧,我将感激不尽啊#include <stdio.h>
#include <malloc.h>
typedef struct lianbiao
{
int data;
struct lianbiao * next;
}lianbiao, *list;
//建立链表
list creatlist(list p)
{
int temp;
list q;
printf("请输入结点的值(以0结束):");
fflush(stdin);
scanf("%d",&temp);
while (temp != 0)
if(temp >0 && temp <9999)
{
q = (list)malloc(sizeof(lianbiao)); //生成新的结点
q -> data = temp;
q -> next = p -> next;
p -> next =q;
}
printf("请输入结点的值(以0结束)");
fflush(stdin);
scanf("%d",&temp);
return p;
}
//删除从第i个结点开始的连续k个结点
int del(int i,int k)
{
list p,q;
int j,n;
q = p -> next;
for(j = 1;j < i;j ++)
{
if(p)
{
p = p -> next;
q = q -> next;
}
else break;
}
for (n = 0;n <= k;n ++)
{
p -> next = q -> next;
free(q);
p -> next = q;
}
return 0;
}
//输出链表
void print(list p)
{
//list p;
int i = 0;
while (p != NULL)
{
i ++;
printf("第%d个元素是:",i);
printf("%d\n",p -> data);
p = p -> next;
}
}
void main()
{
list p;
p = (list)malloc(sizeof(lianbiao));
creatlist(p);
print(p);
del(1,5);//第1个结点开始的连续5个结点
print(p);
}