#include<stdio.h>
#include<stdlib.h>
typedef struct lnode{
int data;
struct lnode *next;
}lnode,*linklist ;
int a[4]={1,2,3,4};
int n=4;
void buildlist(linklist &L)
{
L=(linklist)malloc(sizeof(lnode));
lnode *s,*r=L;//数据指针,指向需要赋值的元素;p前驱指针,开始时指向表头
for(int i=0;i<n;i++)
{
s=(lnode *)malloc(sizeof(lnode));
s->data=a[i];
r->next=s;
r=r->next;
}
}
void disp(linklist L)
{
lnode *s=L->next;
while(s)
{
printf("%d",s->data);
s=s->next;
}
}
void deletex(linklist &L,int x)
{
lnode *p=L->next,*q,*r=L;
while(p)
{
if(p->data!=x)
{
r->next=p;
r=p;
p=p->next;
}
else
{
q=p;
p=p->next;
free(q);
}
}
}
int main()
{
linklist L;
buildlist(L);
disp(L);
deletex(L,3);
disp(L);
return 0;
}
带头结点的单链表删除为x的节点,为什么输出不对
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- qzjhjxj 2022-04-19 15:50关注
修改如下,供参考:
#include<stdio.h> #include<stdlib.h> typedef struct lnode { int data; struct lnode* next; }lnode, * linklist; int a[4] = { 1,2,3,4 }; int n = 4; void buildlist(linklist& L) { L = (linklist)malloc(sizeof(lnode)); lnode* s, * r = L;//数据指针,指向需要赋值的元素;p前驱指针,开始时指向表头 for (int i = 0; i < n; i++) { s = (lnode*)malloc(sizeof(lnode)); s->next = NULL; //修改 s->data = a[i]; r->next = s; r = s;//r = r->next; 修改 } } void disp(linklist L) { lnode* s = L->next; while (s) { printf("%d ", s->data); s = s->next; } printf("\n"); } void deletex(linklist& L, int x) { lnode* p = L->next, * q, * r = L; while (p) { if (p->data != x) { //r->next = p;//修改 r = p; //修改 p = p->next; } else { q = p; r->next = p->next;//修改 //p = p->next; free(q); p = r; //修改 } } } int main() { linklist L; buildlist(L); disp(L); deletex(L, 3); disp(L); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 远程桌面文档内容复制粘贴,格式会变化
- ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
- ¥15 这种微信登录授权 谁可以做啊
- ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
- ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
- ¥15 网络设备配置与管理这个该怎么弄
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题