头插法建立单链表
LinkList Creat_LinkList1() //头插法建立单链表
{ Linklist H=(Linklist)malloc(sizeof(LNode));
H->next=NULL;
LNode *s;
int x;
scanf("%d",&x);
while(x!=-1)
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s-next=H->next; // s和H指向同一个节点;
H->next=s; //H指向s,s在H后面;
scanf("%d");
}
return 0;
}
尾插法建立单链表
LinkList creat_Linklist2)
{
Linklist H=(Linklist)malloc(sizeof(LNode));//生成头节点
H->next=NULL;//空表
LNone * s,* r=H;
int x;
scanf("%d",&x);
while(x!=-1)
{
s=(LinkList)malloc(sizeof(LNone));
s->data=x;
r->next=s;
r=s; //r指向新的尾结点
scanf("%d",&x);
}
r->next=NULL;
return H;
}
求单链表的表长
int Length_LinkList(LinkList H)
{ LNode * p=H; //p指向头节点
int j=0;
while(p->next!=NULL)
{ p=p->next;
j++;
}
return j;
}
单链表中按序号查找
LinkList Get_LinkList(LinkList H,int k)
{
LNode * p=H;
int j=0;
while(p->next!=NULL && j<k)
{
p=p->next;
j++;
}
if(j==k) return p ;
else return NULL:
}
单链表中按值查找
LNode * Locate(LinkList H,DataType x)
{ LNode *p=H->next;
while(p!=NULL && p->data!=x)
p=p->next;
return p;
}
单链表的插入
int Insert_LinkList(LinkList H,int i,DataType x)
{ LNode * p, * s;
p=Get_LinkList(H,i-1); //查找第i-1个结点
if(p==NULL) //节点不村子,不能插入
{
printf("插入位置i错");
return ERROR;
}
else
{ s=(LinkList)malloc(sizeof(LNode));//申请新结点
s->data=x;
s->next=p->next;//新结点插入第i-1个结点后
p->next=s;
return TRUE;
}
}
单链表的删除
int Del_LinkList(LinkList H,int i)
{ LinkList p,q;
p=Get_LinkList(H,i-1);
if(p==NULL)
{ printf("第i-1个结点不存在");return ERROR;}
else { if(p->next==NULL)
{ printf("第i个结点不存在");return EARROR;}
else
{
q=p->next;
p->next=q->next;
free(q);
return TRUE;
}
}
单链表的逆置
void Reveres(LinkList H)
{
LNode * p,* q;
p=H->next;
H->next=NULL;
while(1)
{
q=p;
p=p->next;
q->next=H->next;
H->next=q;
}
}
单链表中重复删除重复结点
void pur_LinkList(LinkList H)
{
LNode * p, * q, * r;
p=H->next;
if(p!=NULL)
while(p->next)
{
q=p;
while(q->next)
{
if(q->next->data=p->data)
{
r=q->next;
r->next=q->next;
free(r):
}
else q=q->next;
}
p=p->next;
}
}
两个集合的差集
void Difference(LinkList LA,LinkList LB)
{ Node * pre, * p, * r;
pre=LA;
p=LA->next;
while(p!=NULL)
{
q=LB->next;
while(q!=NULL&&q->data!=p->data)
q=q->next;
if(q!=NULL)
{ r=p;
pre->next=P->next;
p=p->next;
free(r);
}
else
{
pre=p;
p=p->next;
}
}
}