#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;
}
修改见注释,供参考:
#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;
}
哥,你这个m是char类型啊,然后你scan成字符串那是肯定不行的呢。