链表结点的查找
**目标**:在一个单项链表中(所有数据不重复)中查找值为key的结点。并返回节点地址,若未找到返回NULL
方法一:
注意:本题要求返回所查找元素key的结点地址,故输出时直接输出地址即可。
遍历链表,一一比对p->data值是否等于所要查找元素key,若找到,则返回找到元素的地址,若未找到,则输出"您查找的数值不存在。"
代码实现:
Elensn* find(Elensn* h,int key)//传递首地址和要查找元素
{
Elensn *pfind=NULL,*p;
for(p=h; p->next!=NULL; p=p->next)
if(p->data=https://www.it610.com/article/=key)
pfind=p;
return(pfind);
}
方法二:
和方法一思想相同,运用了for的空循环,使链表的查找更为简便。
代码实现:
Elensn* find(Elensn* h,int key)
{
Elensn *p;
for(p=h;
p&&p->data!=key;
p=p->next);
return(p);
}
具体代码:
#include
#include
#include
#define N 6
typedef struct Node
{
int data;
struct Node *next;
}Elensn;
Elensn *initLink(int *a,int n)
{
int i;
Elensn *h=NULL,*tail;
h=tail=(Elensn*)malloc(sizeof(Elensn));
h->data=https://www.it610.com/article/a[0];
h->next=NULL;
for(i=1;
inext=(Elensn*)malloc(sizeof(Elensn));
tail->data=https://www.it610.com/article/a[i];
tail->next=NULL;
}
return h;
}
void printLink(Elensn* head)
{
Elensn* p;
for(p=head;
p!=NULL;
p=p->next)
printf("%d\t",p->data);
printf("\n");
}
Elensn* findkey(Elensn* h,int key)
{
Elensn *pfind=NULL,*p;
for(p=h;
p->next!=NULL;
p=p->next)
if(p->data=https://www.it610.com/article/=key)
pfind=p;
return pfind;
}int main(void)
{
int a[N]={1,2,3,4,5,6},key;
Elensn * head,*pfind;
printf("请输出要查找的内容key\n");
scanf("%d",&key);
head=initLink(a,N);
pfind=findkey(head,key);
if(pfind)
printf("所查找key的地址为:%x\n",pfind);
else
printf("您查找的数值不存在。");
return 0;
}
实现效果:
文章图片
【链表结点的查找】
文章图片
推荐阅读
- 数据结构|C++技巧(用class类实现链表)
- 数据结构学习指导|数据结构初阶(线性表)
- PTA题目集|6-2 单链表结点删除(20 分)_单链表的删除节点的两种方式——还是双指针和链表覆盖好用
- PTA题目集|6-5 链表逆置(20 分)——头插或者重开新链表头插
- PTA题目集|6-4 建立学生信息链表(20 分)——尾插建链表_题程序访问是越界——真是醉了,你自己跑下是会抛出异常的
- 链表|C语言课程设计——图书管理系统
- java学习|【算法学习】链表数相加(Java)
- 链表的应用
- C++|单链表的增、删、改、减(C++)