整理一下链表的创建、查找节点、插入节点、删除节点。。。做了一个应用实例
代码:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct node
{
char data;
struct node *next;
}LinkList;
LinkList* LinkListCreat()
{
char ch;
LinkList *p,*p1,*p2;
p=(LinkList *)malloc(sizeof(LinkList));
p->data='\0';
p->next=NULL;
p1=p;
while((ch=getchar())!='\n')
{
p2=(LinkList *)malloc(sizeof(LinkList));
p2->data=ch;
p2->next=NULL;
p1->next=p2;
p1=p2;
}
return p;
}
LinkList* ElemLocatedbyNum(LinkList *p,int n)
{
int i=1;
LinkList *q;
q=p;
while(q!=NULL)
{
if(n==i)
return q;
i++;
q=q->next;
}
return NULL;
}
int LinkListInsert(LinkList *p,int n,char ch)
{
LinkList *p1,*p2;
p1=ElemLocatedbyNum(p,n-1);
if(p1==NULL)
{
printf("error\n");
return -1;
}
p2=(LinkList*)malloc(sizeof(LinkList));
p2->data=ch;
p2->next=p1->next;
p1->next=p2;
return 0;
}
int LinkListDelete(LinkList *p,int n)
{
LinkList *p1,*p2;
p1=ElemLocatedbyNum(p,n-1);
if(p1==NULL)
{
printf("error!\n");
return -1;
}
p2=p1->next;
p1->next=p2->next;
free(p2);
return 0;
}
int main()
{
LinkList *p,*q;
p=LinkListCreat();
q=p->next;
printf("element:\n");
while(q)
{
printf("%c ",q->data);
q=q->next;
}
printf("\n");
LinkListInsert(p,10,'T');
q=p->next;
printf("element:\n");
while(q)
{
printf("%c ",q->data);
q=q->next;
}
printf("\n");
LinkListDelete(p,4);
q=p->next;
printf("element:\n");
while(q)
{
printf("%c ",q->data);
q=q->next;
}
return 0;
}
运行结果:
感想:再也不买盗版的书籍了。。害得我修改了一个多小时,查找节点的那个函数竟然印错了