1)查找
例:在一个非空单向链表(数据域值不重复)查找值为key的结点,并返回结点地址,若未找到返回NULL。
ElemSN * FindKeyNode(ElemSN *h,int key)
{
for(ElemSN *p=h;p && p->data!=key;p=p->next);
return p;
}
例:
①输出单向链表尾结点的值。(非空链表)
②输出单向链表结点个数。
③输出单向链表,结点值为奇数的结点个数。(数据域正整数)
④输出单向链表,结点值最大的值。
⑤ 逆向输出单向链表数据域的值。
//①输出单向链表尾结点的值。(非空链表)
int TialNode(ElemSN *head)
{
for(ElemSN *p=head;p->next;p=p->next);
return p->data;
}
//②输出单向链表结点个数。
int CountNode(ElemSN *head)
{
int cnt=0;
for(ElemSN *p=head;p;p=p->next,cnt++);
return cnt;
}
//③输出单向链表,结点值为奇数的结点个数。(数据域正整数)
int CountOdd(ElemSN *head)
{
int cnt=0;
for(ElemSN * p=head;p;p=p->next)
{
if(p->data%2==0)
cnt++;
}
return cnt;
}
//④输出单向链表,结点值最大的值。
int MaxNode(ElemSN *head)
{
int max=head->data;
for(ElemSN * p=head->next;p;p=p->next)
{
if(p->data>max)
max=p->data;
}
return max;
}
//⑤逆向输出单向链表数据域的值。
void RePrintLink(ElemSN *head)
{
ElemSN *p,*tag=NULL;//tag起岗哨作用
while(tag!=head)
{
for(p=head;p->next!=tag;p=p->next);
tag=p;
printf("%5d",tag->data);
}
printf("\n");
}