一、结构体定义
typedef struct LNode //LNode不可省
{
int data; //数据域
struct LNode *next;
}LNode;
二、操作
1.尾插法建立单链表
void creatListT(LNode *&L,int a[],int n)
{
LNode *s,*r; //s用来指向新生成的结点,r始终指向L的终端结点
L=(LNode*)malloc(sizeof(LNode)); //申请头结点空间
L->next=NULL;
r=L; //此时头结点就是终端结点
for(int i=0;i<n;++i)
{
s=(LNode*)malloc(sizeof(LNode)); //为新结点申请空间
s->data=a[i];
r->next=s; // r连接新结点
r=r->next; // r指向s(新的终端结点)
}
r->next=NULL; //链表建立完成,终端结点的next指针指向NULL
}
2.头插法建立单链表
void creatListH(LNode *&L,int a[],int n)
{
LNode *s; //s用来指向新生成的结点
L=(LNode*)malloc(sizeof(LNode)); //申请头结点空间
L->next=NULL;
for(int i=0;i<n;++i)
{
s=(LNode*)malloc(sizeof(LNode)); //为新结点申请空间
s->data=a[i];
s->next=L->next; //新结点next指针指向L中开始结点(L的下一个结点);
L->next=s; //s成为新的开始结点
}
}
3.插入结点
//s:待插入结点
//p:待插入结点的前一个结点
s->next=p->next;
p->next=s;
4.删除结点
p->next=p->next->next;
5.查找结点
///查找值为x的结点并删除
int findAndDelete(LNode *L,int x)
{
LNode *p,*q;
p=L;
while(p->next!=NULL)
{
if(p->next->data==x)
break;
p=p->next;
}
if(p->next==NULL)
return 0;
else
{
q=p->next;
p->next=p->next->next; //删除结点q
free(q);
return 1;
}
}