|
|
#2
寒风中的细雨2011-03-15 21:52
程序代码:/*无头结点单链表删除结点问题 要实现删除一个没有头结点的单链表中删除第i个之后的连续k个结点,下面是我写的代码,头一次接触数据结构, 好像在用键盘输入创建单链表的地方很乱,劳烦大家看看,给我指指问题吧,我将感激不尽啊 */ #include <stdio.h> #include <malloc.h> #include <stdlib.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个结点 list del(int i, int k, list p) { list temp = p; while( i>0 && temp != NULL ) { --i; temp = temp->next; } if( 0 < i ) { printf("\t\t没有足够的结点信息 请确认\n"); exit(0); } list etemp = temp->next; while( k>0 && etemp != NULL ) { --k; etemp = etemp->next; } if( 0 < k ) { printf("\t\t没有足够的结点信息 请确认\n"); exit(0); } temp->next = etemp; return p; } //输出链表 void print(list p) { //list p; int i = 0; p = p->next; while (p != NULL) { i ++; printf("第%d个元素是:",i); printf("%d\n",p -> data); p = p -> next; } } void main() { list p; p = (list)malloc(sizeof(lianbiao)); p->next = NULL; p = creatlist(p); print(p); del(1,5, p);//第1个结点开始的连续5个结点 print(p); } |
要实现删除一个没有头结点的单链表中删除第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);
}
程序代码: