c语言单向链表的删除函数 c语言用链表删除函数怎么写

C语言单链表的删除指定元素操作。

你的DeleteElem我有些看不懂

创新互联-专业网站定制、快速模板网站建设、高性价比塔河网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式塔河网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖塔河地区。费用合理售后完善,10多年实体公司更值得信赖。

根据你想要的功能,给改了一下--

#include

#include

typedef

int

ElemType;

typedef

void

Status;

typedef

struct

Node

{

ElemType

data;

struct

Node

*next;

}LNode,

*LinkList;

Status

CreatList(int

,LinkList

);

Status

Traverse(LinkList

);

Status

FreeList(LinkList

);

ElemType

DelElem(LinkList

,ElemType

);

int

main()

{

int

Length;

ElemType

e;

LinkList

L;

L=(LinkList)malloc(sizeof(LNode));

L-next=NULL;

printf("Input

the

Length

of

List:\n");

scanf("%d",Length);

CreatList(Length,L);

printf("Travers

the

List

:\n");

Traverse(L);

while(1)

{

printf("请输入要删除的元素:\n");

scanf("%d",e);

if(DelElem(L,e))//在L中将元素e删除

{printf("删除%d后:\n",e);break;}

printf("未找到该元素,删除失败\n");

}

Traverse(L);

FreeList(L);

printf("List

release

Success!\n");

//system("PAUSE");return

0已经使

程序暂停

return

0;

}

Status

CreatList(int

Length,LinkList

L)

{

int

i;

LinkList

Body=NULL,p=L;

for

(i=0;i

next=Body;

printf("Input

the

%dth

num:\n",i+1);

scanf("%d",(Body-data));

p=Body;

}

Body-next=NULL;

}

Status

FreeList(LinkList

L)

{

LinkList

temp=NULL,p=L;

while

(p)

{

temp=p-next;

free(p);

p=temp;

}

}

Status

Traverse(LinkList

L)

{

LinkList

p=L;

p=p-next;

while(p)//while(p!=NULL)

{

printf("%d

",p-data);

p=p-next;

}

printf("\n");

}

ElemType

DelElem(LinkList

L,ElemType

e)

{

LinkList

p,q;

q=p=L;

p=p-next;//p指向

头结点

后第一个元素

while(p)

{

if(p-data==e)

{

q-next=p-next;

free(p);

return

1;

}

else{

q=p;//q始终指向p上一个结点

p=p-next;

}

}

//没有执行上个return,说明没找到

return

0;

}

对单链表l进行删除数据元素x的c语言算法

假设有链表1

头结点指针为h,节点类型为

struct

node{

int

date;

struct

node*

next;

}创建链表过程就不写了,亲。

下面是删除元素x的C语言算法(将它写成函数形式):

void

Delete_X(struct

node*

h,int

x)

{

struct

node

*p,*q;

for(p=h,q=NULL;p;q=p,p=p-next){

if(p-date==x){

if(!q){

//如果删除的元素是头结点

h=q-next;

p-next=NULL;

}

//endif

else{

q-next=p-next;

p-next=NULL;

}

//endelse

}

//endif

}

//endfor

}

//end

C语言链表 删除

struct LNode * delete(LNode * head)

{

LNode * node = head;

LNode ** parent = head;

double min, max;

printf("请输入min和max: ");

scanf("%lf %lf", min, max);

while (node)

{

// 大于min和小于max,则删除节点

if (node-data  min  node-data  max)

{

*parent = node-next;

// 如果你的LNode是malloc出来的,需要free(node);

node = *parent;

}

else

{

node = node-next;

parent = node-next;

}

}

return head;

// 这个逻辑不需要给你太多注释,你只需要拿一支笔,手动画一个3个节点的链表,    

// 然后从函数执行开始,一步一步去推怎么执行的就懂了。

// 至于你的程序的错误,没帮你看

}

c语言单项链表的删除

最后面倒数第三行。 p-data==x 当节点不存在的时候p为NULL所以这时候取data错误,

另外该代码还存在内存泄露的问题(没有改)。

正确的该法:

struct node

{

int data;

struct node *next;

};

typedef struct node SLIST;

#includestdio.h

#includemalloc.h

void main()

{

void delete_snode(SLIST *head,int x);

void insert_slist(SLIST *head ,int x,int y);

void print_slist(SLIST *head);

SLIST *creat_slist();

SLIST *h;

int x,y;

int m;

scanf("%d%d",x,y);

scanf("%d",m);

h=creat_slist();

print_slist(h);

insert_slist(h,x,y);

print_slist(h);

delete_snode(h,m);

print_slist(h);

}

SLIST *creat_slist()

{

int c;

SLIST *h,*s,*r;

h=(SLIST *)malloc(sizeof(SLIST));

r=h;

scanf("%d",c);

while(c!=-1)

{

s=(SLIST *)malloc(sizeof(SLIST));

s-data=c;

r-next=s;

r=s;

scanf("%d",c);

}

r-next='\0';

return h;

}

void print_slist(SLIST *head)

{

SLIST *p;

p=head-next;

if(p=='\0')printf("no\n");

else

{

printf("head");

do

{

printf("-%d",p-data);

p=p-next;

}while(p!='\0');

printf("end\n");

}

}

void insert_slist(SLIST *head ,int x,int y)

{

SLIST *s,*p,*q;

s=(SLIST  *)malloc(sizeof(SLIST));

s-data=y;

q=head;

p=head-next;

while(p!='\0'p-data!=x)

{

q=p;p=p-next;

}

s-next=p;

q-next=s;

}

void delete_snode(SLIST *head,int x)

{

SLIST *p,*q;

q=head;

p=head-next;

while(p!='\0'p-data!=x)

{

q=p;

p=p-next;

}

if(p)

if(p-data==x)

q-next=p-next;

}


网站题目:c语言单向链表的删除函数 c语言用链表删除函数怎么写
本文地址:http://scyanting.com/article/hpeegh.html