下列算法將單鏈表中值重復(fù)的結(jié)點(diǎn)刪除,使所得的結(jié)果表中各結(jié)點(diǎn)值均不相同,試完成該算法。
void DelSameNode(LinkList L)
//L是帶頭結(jié)點(diǎn)的單鏈表,刪除其中的值重復(fù)的結(jié)點(diǎn)//
{ListNode * p,*q,*r;
p=L->next; //p初始指向開始結(jié)點(diǎn)//
while(p){ //處理當(dāng)前結(jié)點(diǎn)p//
q=p;
r=q->next;
do { //刪除與結(jié)點(diǎn)*p的值相同的結(jié)點(diǎn)//
while(r&&r->data!=p->data){
q=r;
r=r->next;
}
if(r){ //結(jié)點(diǎn)*r的值與*p的值相同,刪除*r//
q->next=r->next;
free(r);
r=();
}
}while( r );
p=p->next;
}
}
設(shè)線性鏈表的存儲(chǔ)結(jié)構(gòu)如下:
struct node
{ELEMTP data; /*數(shù)據(jù)域*/
struct node *next; /*指針域*/
}
試完成下列在鏈表中值為x的結(jié)點(diǎn)前插入一個(gè)值為y的新結(jié)點(diǎn)。如果x值不存在,則把新結(jié)點(diǎn)插在表尾的算法。
void inserty(struct node *head,ELEMTP x,ELEMTP y)
{s=(struct node *)malloc(sizeof(struct node));
();
if(){s->nexr=head;head=s;}
else {
q=head;p=q->next;
while(p->dqta!=x&&p->next!=NULL){q=p;()}
if(p->data= = x){q->next=s;s->next=p;}
else{p->next=s;s->next=NULL;}
}
}