单链表查找可分为按值查找和按序号查找。
代码:
#include<stdio.h>
#include <malloc.h>
typedef struct linknode
{
int data;
linknode *next;
} Node,*Linklist;//Linklist表示结构体指针
Linklist CreateList_end(int n);//尾插法建立链表
Linklist findval(Linklist L,int k);//按值查找
Linklist findnode(Linklist L,int k);//按序号查找
void ShowList(Linklist L);//输出链表内容
int main(void)
{
Linklist L1;
Node *index1,*index2;
int n;
scanf("%d",&n);
L1=CreateList_end(n);
ShowList(L1);
index1=findval(L1,3);
index2=findnode(L1,3);
printf("%d %d\n",index1->data,index2->data);
return 0;
}
Linklist CreateList_end(int n)
{
Linklist head=(Linklist)malloc(sizeof(Node));
Node *p,*e;
p=head;
int x;
for(int i=0; i<n; i++)//尾插法建立链表
{
e=(Linklist)malloc(sizeof(Node));
scanf("%d",&x);
e->data=x;
p->next=e;
p=e;
}
p->next=NULL;//将链表的最后一个节点的指针域置空
head=head->next;//因为头结点为空,所以所以指向下一个节点这样才有数据域
return head;
}
void ShowList(Linklist L)//输出链表内容
{
while(L)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
Linklist findval(Linklist L,int k)//按值查找
{
while(L!=NULL)
{
if(L->data==k)
break;
L=L->next;
}
if(L!=NULL)
return L;
else
return NULL;
}
Linklist findnode(Linklist L,int k)//按序号查找
{
if(k<=0)
return NULL;
int i=1;
while(L->next!=NULL&&i<k)
{
L=L->next;
i++;
}
if(i==k)
return L;
else
return NULL;
}