关于#单链表#怎么口述这串代码的运行

怎么口述这串代码的运行。。TUT

//删除职工信息
void del(struct worker *m)
{
    int n;                   //用户选择
    char Name[100];          //待查询姓名
    char idNum[100];         //待查询工号
    do
    {
        printf("1 按姓名删除\n");
        printf("2 按工号删除\n");
        scanf ("%d",&n);
        switch (n)
        {
            case 1:name2(m,Name);
                break ;
            case 2:id2(m,idNum);
                break ;
            default: printf("输入错误!\n");
                break ;
        }
    }while(n!=1 && n!=2);
    printf("按任意键返回主菜单!\n");
    getch();
}

void name2(struct worker *m)
{
    char Name[100];
    struct worker *p=m;
    struct worker *p1=m->next;
    printf("请输入需要删除的职工姓名:");
    scanf("%s",Name);

    while(p1!=NULL)
    {
        if(strcmp(p1->name,Name)==0)
        {
            p->next=p1->next;
            free(p1);
            p1=NULL;
            printf("删除成功!\n");
            break;
        }
        p=p1;
        p1=p1->next;
    }
}

void id2(struct worker *m)
{
    char idNum[100];
    struct worker *p=m;
    struct worker *p1=m->next;
    printf("请输入需要删除的职工工号:");
    scanf("%s",idNum);

    while(p1!=NULL)
    {
        if(strcmp(p1->id,idNum)==0)
        {
            p->next=p1->next;
            free(p1);
            p1=NULL;
            printf("删除成功!\n");
            break;
        }
        p=p1;
        p1=p1->next;
    }
}

del是一个总的入口,允许用户选择按照什么方式删除
id2 name2的思路其实都一样,
差别只是输入的信息不同,以及if语句判断找到哪条记录的方式不同
思路都是遍历链表,然后判断每一条和输入的是否一样,这个判断用了 strcmp 字符串比较
然后如果匹配,说明找到了要删除的记录
就让链表指向下一个节点,再释放找到的节点,从而完成删除。