结点结构:
#define Node LinkListNode
typedef int ElemType; //数据元素的类型
typedef struct Node
{
ElemType data; //数据域
struct Node* next; //指针域
}*LinkList;
创建链表:
LinkList CreateList(int n)
{
ElemType x;
int k;
struct Node *head,*r,*p;
p=(struct Node*)malloc(sizeof(struct Node)); //分配头结点空间
if(p==NULL) return NULL;
head=p;p->next=NULL;
r=p;
for(k=1;k<=n;k++)
{
printf("请输入第%d个元素:\n",k);
scanf("%d",&x);
p=(struct Node*)malloc(sizeof(struct Node));
if(p==NULL)
{
DestroyList(head);
return NULL;
}
p->data=x;
p->next=NULL;
r->next=p;
r=r->next;
}
return head;
}
插入元素:
bool InsertInList(LinkList list,int pos,ElemType elem)
{
struct Node *pre=list,*p=list->next;
while(--pos>0 && p!=NULL)
{
pre=p;
p=p->next;
}
if(pos!=0) return false;
p=(struct Node*)malloc(sizeof(struct Node));
if(p==NULL) return false;
p->data=elem;
p->next=pre->next;
pre->next=p;
return true;
}
删除结点:
bool DeleteInList(LinkList list,int i,ElemType *e)
{
struct Node *p=list->next,*pre=list; //p指向第一个结点,pre指向p的前驱
while(p!=NULL && --i>0)
{
pre=p;
p=p->next;
}
if(p!=NULL)
{
*e=p->data;
pre->next=p->next;
free(p);
return true; //结点成功删除
}
return false; //结点不存在
}