只有1个成员的结构组成链表,功能:创建链表、增加节点、删除节点、打印链表。
#include
#include
typedef struct stt
{
char c;
struct stt *next;
}STT;
void prfSTT(STT *sttHead)//打印链表
{
while(sttHead->next!=NULL)
{
printf("%c",sttHead->next->c);
sttHead=sttHead->next;
}
printf("\n");
}
STT *getSTTS()//创建链表返回首节点
{
char c;
STT *newSTT=NULL,*stt0=NULL,*headTail=NULL;
printf("输入一组字符组成链表:(回车结束输入)\n");
while(1)
{
c=getchar();
if(c=='\n')
break;
newSTT=(STT *)malloc(sizeof(STT));
newSTT->c=c;
newSTT->next=NULL;
if(stt0==NULL)
stt0=newSTT;
else
headTail->next= newSTT;
headTail=newSTT;
}
return stt0;
}
int deleteSTT(STT *sttHead)//删除节点 返回1删除成功, 返回0删除失败
{
int i=0,cont=0;
STT *sttLast=NULL,*sttNext=NULL;
printf("输入要删除第几个节点:");
scanf("%d",&cont);
if(cont==1)
{
sttNext=sttHead->next->next;
sttHead->next->next=NULL;
free(sttHead->next);
sttHead->next=sttNext;
return 1;
}
while(sttHead->next!=NULL)
{
i++;
if(i==cont-1)
sttLast=sttHead->next;
if(i==cont)
{
sttNext=sttHead->next->next;
sttHead->next->next=NULL;
free(sttHead->next);
sttLast->next=sttNext;
return 1;
}
sttHead=sttHead->next;
}
return 0;
}
int insertSTT(STT *sttHead)//输入超出链表长度,将插入到链表最后位置。输入0则插入在首节点位置。 返回1插入指定位置成功,返回0未找到指定位置插入在最后
{
int i=0,cont=0;
STT *newSTT=NULL;
newSTT=(STT *)malloc(sizeof(STT));
newSTT->next=NULL;
printf("给新的节点输入一个字符:");
scanf("%c",&(newSTT->c));
printf("输入要插入在第几个节点后面:");
scanf("%d",&cont);
while(sttHead->next!=NULL)
{
i++;
if(cont==0)
{
newSTT->next=sttHead->next;
sttHead->next=newSTT;
return 1;
}
if(i==cont)
{
newSTT->next=sttHead->next->next;
sttHead->next->next=newSTT;
return 1;
}
sttHead=sttHead->next;
}
sttHead->next=newSTT;
return 0;
}
int main()
{
STT *sttHead=NULL;
sttHead=(STT *)malloc(sizeof(STT));
sttHead->next=getSTTS();
printf("\n输入的链表为:\n");
prfSTT(sttHead);
printf("\n---开始插入---\n");
insertSTT(sttHead);
printf("插入后的链表为:\n");
prfSTT(sttHead);
printf("\n---开始删除---\n");
if(deleteSTT(sttHead))
{
printf("删除后的链表为:\n");
prfSTT(sttHead);
}
else
printf("删除失败!节点不存在!\n");
return 0;
}