如何删除链表接点并输出

来源:百度知道 编辑:UC知道 时间:2024/05/09 05:23:59
#include "stdio.h"
#include "conio.h"
#include "math.h"
struct node
{int data;
struct node *next;};
typedef struct node AA;
AA *gz()
{AA *h,*r,*b; int a;
r=(AA *)malloc(sizeof(AA));
h=r;
printf("qing shu ru\n");
scanf("%d",&a);
while(a)
{ b=(AA *)malloc(sizeof(AA));
b->data=a;
r->next=b;
r=b;
scanf("%d",&a);}
r->next='\0';
return h;}----链表

sh()
{AA *to,*pp,*p,*t,*head=gz();---------链表头指针

t=head;

t=t->next;

while(t)
{if(t->data==30){to=t;pp->next=t->next
head->next=pp->next;free(to);}----------------就是这里为什么我无法删除接点??????????????

删除链表节点是需要先建立指针指向将要删除的节点,然后将该节点的下一节点指针值赋给上一节点的指针,最后根据开始建立的指针释放需要删除的节点,之所以不能先释放是因为需要使用节点内部的指针,如果先释放了,其内容可能会被修改,这样是不安全的
我们通常会将最后一个节点的下一指针设为null的,即为0,当从头开始遍历到末节点时,最后一次指针变为0,退出循环。
顺便提一下编程时要有一个好一点的编程风格,像你这样的程序很难读,而且变量名字起的也不好,这样的代码可读性太差了

#include "stdio.h"
#include "conio.h"
#include "math.h"
struct node
{int data;
struct node *next;};
typedef struct node AA;
AA *gz()
{AA *h,*r,*b; int a;
r=(AA *)malloc(sizeof(AA));
h=r;
printf("qing shu ru\n");
scanf("%d",&a);
while(a)
{ b=(AA *)malloc(sizeof(AA));
b->data=a;
r->next=b;
r=b;
scanf("%d",&a);}
r->next=NULL;
return h;}

sh()
{AA *to,*pp,*p,*t,*head=gz();

p=t=head;//这里

t=t->next;

while(t)
{
if(t->data==30)
{
p->next=t->next;//这里一部分
free(t);
}
p=t;
t=t-&