单链表节点定义:
typedef struct LNode{
ElemType data; //数据域
struct LNode *next; //指针域
}Lnode,*LinkList;
1 头插法建立单链表
采用头插法建立单链表,读入数据顺序与生成链表中的元素顺序是相反的,每个节点的插入时间是o(1),总的时间复杂度是o(n)
LinkList CreateList(LinkList &L){
//每次都在头结点之后插入元素
LNode *s;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=9999)
//输入999结束
{
s=(Linklist)malloc(sizeof(Lnode));
L->data=x;
s->next=L->next;
L->next=s;
scancf("%d",&x);
}
return L;
}
2采用尾插法建立单链表
LinkList Createlist(LinkList &L){
//从表头到表尾正向建立单链表L,每次均在表尾插入元素
int x;
L=(LinkList)malloc(sizeof(Lnode));
Lnode *s,*r=L;
scanf("%d",&x);
while(x!=9999){
s=(Lnode *)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",x);
}
r->next=NULL;
return L;
}
按照值查找算法:
LNode *LocateElem(LinkList L,ElemType e){
LNode *p=L->next;
while(p!=NULL& p->data!=e){
p=p->next;
}
return p;
}
插入节点操作:
1 p=GetElem(L,i-1);
2 s->next=p->next;
3 p->next=s;
删除节点
p=GetElem(L.i-1);
q=p->next;
p->next=q->next;
free(q);