typedef struct Node {
ElemType data;
struct Node *next;
} Node,*LinkLIst;
LinkLIst L;
LinkList 与 Node*同为结构指针类斜体样式型,这两种类型是等价的。
通常我们习惯上用LinkList说明指针变量,强调它是某个单链表的头指针变量,用
Node*来定义指向单链表中节点的指针。
int listlength(linklist L){
node *p;
p=->next;
j=0;
while(p!=NULL){
p=p->next;
j++;
}
return j;
}
InitList(linklist *L){
L=(linklist)malloc(sizeof(node));
L->next=NULL;
}
linklist creatfromhead(linklist l){
node *s;
char c;
int flag=1;
while(flag){
c=getchar();
if(c!='$'){
s(node*)malloc(sizeof(node))
s->data=c;
s->next=L->next;
L->next=s;
}
else flag=0;
}
}
linklist createfromtail(linklist L){
linklist L;
node *r,*s;
int flag=1;
r=L;
while(flag){
c=getchar();
if(c!='$'){
s=(node*)malloc(sizeof(node));
s->data=c;
r->next=s;
r=s;
}
else{
flag=0;
r->next=NULL;
}
}
}
node *get(linklist L,int i)
{
int j=0;
node *p;
p=L;
while((p->next!=NULL)&&(j<i)){
p=p->next;
j++;
}
if(i==j)return p;
else return NULL;
}
node *locate(linklist L,elemtype key)
{
node *p;
p=->next;
while(p!=NULL){
if(p->data!=key)
p=p->next;
else break;
}
return p;
}
void inslist(linklist L,int i,elemtype e){
node *pre,*s;
int k=0;
pre=L;
while(pre!=NULL&&k<(i-1))
{
pre=pre->next;
k++;
}
if(!pre)
{
printf("插入位置不合理");
return ERROR;
}
s=(node*)malloc(sizeof(node));
s->data=e;
s->next=pre->next;
pre->next=s;
return OK;
}
void dellist(linklist L,int i,elemtype *e)
{
node *p,*r;
int k=0;
p=L;
while(p->next!=NULL&&k<(i-1))
{
p=p->next;
k++;
}
if(k!=i-1)
{
printf("删除位置i不合理");
return ;
}
r=p->next;
p->next=p->next->next;
*e=r->data;
free(r);
}
void difference(linklist la,linklist lb) {
node *pre,*p,*q,*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;
}
}
}