单向链表的查找与删除

Posted laziya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单向链表的查找与删除相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>
#define N 7

typedef struct node{
int data;
struct node *next;
}ElemSN;

ElemSN *Creatlink(int a[]);
void Printlink(ElemSN *h);
ElemSN *Findnode(ElemSN *h,int key);
ElemSN *Delnode(ElemSN *h,int key);


int main(void)
{
int a[7]={3,2,5,8,4,7,6};
ElemSN *head,*pkey,*h1;
int key;
scanf("%d",&key);
head=Creatlink(a);
Printlink(head);
printf(" ");
//查找
pkey=Findnode(head,key);
if(!pkey)
printf("NOTFIND");
else
printf("%5d ",pkey->data);
printf(" ");
//删除
h1=Delnode(head,key);
Printlink(h1);
printf(" ");
}

ElemSN *Creatlink(int a[])
{
ElemSN *p,*h;
int i;
h=p=(ElemSN *)malloc(sizeof(ElemSN));
h->data =a[0];
h->next=NULL;
for(i=1;i<N;i++)
{
p=p->next=(ElemSN *)malloc(sizeof(ElemSN));
p->data=a[i];
p->next=NULL;
}
return h;
}

void Printlink(ElemSN *h)
{
ElemSN *p;
for(p=h;p;p=p->next)
{
printf("%5d",p->data);
}
}

ElemSN *Findnode(ElemSN *h,int key)
{
ElemSN *p;
for(p=h;p&&p->data!=key;p=p->next);
//返回结果在主函数中
return p;
}

ElemSN *Delnode(ElemSN *h,int key)
{
ElemSN *p,*q;
for(p=h;p&&p->data!=key;q=p,p=p->next);
if(!p)
printf("NOTFIND");
else
{
if(p-h)
q->next=p->next ;
else //删头
h=h->next ;
}
return h;
}







































































以上是关于单向链表的查找与删除的主要内容,如果未能解决你的问题,请参考以下文章

单向链表的元素查找和删除

实例讲解——单向链表

单向加头链表的[构建插入删除查找输出]

单向加头链表的构建插入删除查找输出

再谈单向链表操作——单向链表的访问与修改

数据结构《二》链表的实现