C语言单链表中删除所有值为a的元素

C语言单链表中删除所有值为a的元素 要怎么删除啊?
整个链表中都是char的值,然后要删除所有值为a的元素。
我编了半天一直出错
求高手指点!!
谢谢!

void deleteL(LinkNode *head,char a)//此链表假定带头结点,否则还要加一条对第一个结点的操作。LinkNode为定义的链表类型,a为指定的要删除的字符。
{
ListNode *p,*q;
p=head;
while (p->next!=NULL)
{if (p->next->data==a)
{q=p->next;
p->next=p->next->next;//删除指定的字符
free(q);
else
p=p->next;//不删除,只是指针后移
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-25
#include<iostream>
using namespace std;

typedef struct LNode
{
char data;
struct LNode *next;
}LNode,*LinkList;

void create(LinkList *L);
void print(LinkList L);
void del(LinkList *L, char a);

int main()
{
LinkList L;

create(&L);
print(L);

del(&L, 'b');
print(L);

system("pause");
return 0;
}

void create(LinkList *L)
{
int n;
*L = new LNode;
(*L)->next = NULL;
cout<<"input a number:";
cin>>n;
LinkList node,fnode;
node = fnode = *L;
for(int i = 0; i < n; i++)
{
node = new LNode;
cin>>node->data;
node->next = NULL;
fnode->next = node;
fnode = node;
}
}

void print(LinkList L)
{
if(L->next == NULL)
cout<<"Empty List"<<endl;
else
{
LinkList p = L->next;
while(p)
{
cout<< p->data <<" ";
p = p->next;
}
}
cout<<endl;
}

void del(LinkList *L, char a)
{
LinkList node,fnode;
fnode = *L;
node = (*L)->next;
while(node != NULL)
{
if(node->data == a)
{
fnode->next = node->next;
delete node;
node = fnode->next;
cout<<"delete successfully"<<endl;
}else
{
fnode = node;
node = node->next;
}
}
if(node)
{
fnode->next = node->next;
delete node;
cout<<"delete successfully"<<endl;
}
else
cout<<"can not delete"<<endl;
}

在visual studio 2008里成功运行了。的追问

我的结构体是这样定义的:
typedef struct node
{
char value;
struct node *nPtr;
}nodePtr,*listNodePtr;
然后我的函数是 void insert(listNodePtr *ptr,char a),变量声明是listNodePtr *link(不知道能不能这样定义头结点,因为第一次用链表),然后我参数传递的时候用的是(&link,b)
这样为什么不行啊?VC2010和GCC都运行不了 说这里有错误
求指点!谢谢~~~~

追答

b是个变量吗?
(&link,'b')

追问

b是我输入的char变量,我用了&link vc2010就在&下面划了横线,gcc也是这里运行不出

追答

link要是 listNodePtr 类型的

相似回答