供参考:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
char ch;
struct node* next;
}Node;
void creatlist(Node** L)
{
char c;
Node* pL, * q;
(*L) = (Node*)malloc(sizeof(Node));
(*L)->next = NULL;
pL = (*L);
while ((c = getchar()) != '\n') {
q = (Node*)malloc(sizeof(Node));
q->next = NULL;
q->ch = c;
pL->next = q;
pL = q;
}
}
void delnum(Node* L)
{
Node* pL = L, * pLr = NULL;
while (pL->next) {
if (pL->next->ch >= '0' && pL->next->ch <= '9') {
pLr = pL->next;
pL->next = pLr->next;
free(pLr);
}
else
pL = pL->next;
}
}
void print(Node* L)
{
Node* p = L;
while (p->next) {
printf("%c ", p->next->ch);
p = p->next;
}
printf("\n");
}
int main()
{
Node* L = NULL;
creatlist(&L);//创建带头结点链表
print(L); //输出链表
delnum(L); //删除链表的数字字符
print(L); //输出删除数字字符的链表
return 0;
}
首先要理解链表的工作方式,那个指向线并不存在,只是便于理解而画,在结构体中,有一个和结构体类型一致的指针,用于指向下一个结构体的地址,这条线就是这么来的,链表结构体两大部分,数据部分,指针部分
你可以去参考一下我主页的单链表,里面有源代码,包括了增删插的操作。