本题要求实现一个函数,求带头结点的单链表中元素序号。
函数接口定义:
int Locate ( LinkList L, ElemType e);
L是带头结点的单链表的头指针,e是要查找的元素值。如果e在单链表中存在,函数Locate返回其序号(序号从1开始);否则,返回0。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
LinkList Create();/* 细节在此不表 */
int Locate ( LinkList L, ElemType e);
int main()
{
ElemType e;
LinkList L = Create();
scanf("%d",&e);
printf("%d\n", Locate(L,e));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
2 1 4 5 3 -1
5
输出样例:
4
分析:
一开始有一个1分的点一直卡着不过
后来发现是思路和人家想的不一样,别人的代码是先判断是不是一样再往下走,如果不一样才继续找,而我的代码是不管三七二十一一直找,找得到才停下,这样如果是非空链表而没有相应值,那么得到的就是错误的结果。
先附上9分代码:
int Locate ( LinkList L, ElemType e)
{
if(L==NULL)
return 0;
int loc = 0;
while(L->next!=NULL)
{
loc++;
L = L->next;
if(e==L->data)
break;
}
return loc;
}
然后是完全正确的代码:
int Locate ( LinkList L, ElemType e)
{
LNode *p;
int loc = 1;
if(L==NULL)
return 0;
else{
p = L->next;
while(p!=NULL)
{
if(p->data!=e)
{
loc++;
p = p->next;
}
else
break;
}
if(p==NULL)
{
return 0;
}
else
return loc;
}
}
生活沒有前戲 发布了182 篇原创文章 · 获赞 27 · 访问量 7万+ 私信 关注