6-1 按值查找单链表 (10分)
本题要求实现一个函数,Locate_LinkList(LinkList L, datatype x)
函数是在带头结点单链表中查找值为x的结点。函数须返回找到结点的指针,没有找到返回空。
函数接口定义:
LNode *Locate_LinkList(LinkList L, datatype x);
其中 L 和 x 都是用户传入的参数。 L 是单链表的头指针; x 是需要查找的值。函数须返回找到结点的指针,没有找到返回空。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#define FLAG -1
#include <stdio.h>
#include <malloc.h>
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}LNode, *LinkList;
LinkList Creat_LinkList();/*这里忽略函数的实现*/
LNode *Locate_LinkList(LinkList L, datatype x);
int main()
{
LinkList L;
LNode *p=NULL;
int x;
L = Creat_LinkList();
if(L == NULL)
{
printf("L=NULL,error!");
return 0;
}
scanf("%d",&x);
if(p=Locate_LinkList(L,x)) printf("%d",p->data);
else printf("NOT");
return 0;
}
/* 请在这里填写答案 */
输入样例:
在这里给出一组输入。例如:
1 2 3 4 5 6 7 8 9 10 -1
8
输出样例:
在这里给出相应的输出。例如:
8
//思路:创建一个指针,遍历整个链表,直到找到该元素,否则指针后移
//注意:找到则返回一,否则返回零,要考虑空表的情况
int ListLocate_L(LinkList L, ElemType x)
{
LNode* p;
p = L->next;
if(!p) return ERROR;//空表
int i=1;
while (p && p!=NULL)//遍历
{
if(p->data==x)//找到
{
return i;
}
i++;//记录位序
p = p->next;
}
return 0;
}