结构体会定义 但是链表的结构体怎么定义 删除操作会但是在链表里删除所有数字

img


链表中的这些操作怎么做,单拎出来的话会,但是怎么结合到链表里,自己写的感觉根本都不规范

供参考:

#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;
}

img

首先要理解链表的工作方式,那个指向线并不存在,只是便于理解而画,在结构体中,有一个和结构体类型一致的指针,用于指向下一个结构体的地址,这条线就是这么来的,链表结构体两大部分,数据部分,指针部分

你可以去参考一下我主页的单链表,里面有源代码,包括了增删插的操作。