#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode,*LinkList;
LinkList creat(LinkList L)//头插法建立
{
LinkList s;
printf("请选择输入的个数:\n");
int i,n;
char m;
scanf("%d",&n);
for(i=0; i<n; i++)
{
s=(LinkList)malloc(sizeof(LNode));
s->next=NULL;
scanf("%s",m);
s->data=m;
s->next=L->next;
L->next=s;
}
return L;
}
void PrintList(LinkList L)
{
LinkList p;
p=L->next;
printf("链表元素如下:\n");
while(p!=NULL)
{
printf("%s ",p->data);
p=p->next;
}
printf("\n");
}
void DeleteList(LinkList L)
{
LinkList p,q;
p=L->next;
while(p!=NULL)
{
if(strcmp(p->data,"x")!=0)
p=p->next;
else
{
q=(LinkList)malloc(sizeof(LNode));
q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q); p=p->next;
}
}
printf("\n");
}
int main()
{
LinkList L;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
L=creat(L);
PrintList(L);
printf("删除x的节点:\n");
DeleteList(L);
return 0;
}
在删除单链表中x元素的结点,无法输入第二个字母,为什么
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- qzjhjxj 2021-09-26 10:35关注
修改见注释,供参考:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> typedef char ElemType; typedef struct LNode { ElemType data; struct LNode* next; } LNode, * LinkList; void creat(LinkList L)//头插法建立,修改 LinkList creat(LinkList L) { LinkList s; printf("请选择输入的个数:\n"); int i, n; //char m;修改 scanf("%d", &n); for (i = 0; i < n; i++) { s = (LinkList)malloc(sizeof(LNode)); s->next = NULL; getchar(); //修改,吸收缓冲区多余字符 scanf("%c", &s->data);//scanf("%s", m);修改 //s->data = m;修改 s->next = L->next; L->next = s; } //return L; 修改 } void PrintList(LinkList L) { LinkList p; p = L->next; printf("链表元素如下:\n"); while (p != NULL) { printf("%c ", p->data);//printf("%s ",p->data);修改 p = p->next; } printf("\n"); } void DeleteList(LinkList L, ElemType x) //修改 { LinkList p, q; q = L; p = L->next; while (p != NULL) { if (p->data == x) {//if (strcmp(p->data, "x") != 0)修改 q->next = p->next; // p = p->next; 修改 //else //{ // q = (LinkList)malloc(sizeof(LNode)); // q = p->next; // p->data = p->next->data; // p->next = q->next; free(p); //修改 break; } q = p; p = p->next; } printf("\n"); } int main() { LinkList L; ElemType x; //修改 L = (LinkList)malloc(sizeof(LNode)); L->next = NULL; creat(L); //L = creat(L); 修改 PrintList(L); printf("输入需要删除的节点元素 x:\n");//修改 getchar(); //修改 scanf("%c", &x); //修改 DeleteList(L,x); //修改 PrintList(L); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥20 access多表提取相同字段数据并合并
- ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
- ¥20 Java-Oj-桌布的计算
- ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
- ¥20 有人知道这种图怎么画吗?
- ¥15 pyqt6如何引用qrc文件加载里面的的资源
- ¥15 安卓JNI项目使用lua上的问题
- ¥20 RL+GNN解决人员排班问题时梯度消失
- ¥60 要数控稳压电源测试数据
- ¥15 能帮我写下这个编程吗