[size=3]/*删除线性表中,指定的某个字母(通过函数来实现)*/[/size]



#include <iostream>
#define L 9
using namespace std;
typedef struct Lnode
{
    char   letter;
    struct Lnode *next;
}Linklist;
Linklist *head,*p,*rear;


void dele(Linklist *,int);
void prift(Linklist *);
int main()
{  
    head=(Linklist *)malloc(sizeof(Linklist));
    head->next=NULL;
    p=head;
    
    
    for(int i=0;i<L;++i)
    {
        rear=(Linklist *)malloc(sizeof(Linklist));
        rear->letter='A'+i;
        rear->next=NULL;
        
        p->next=rear;
        p=p->next;
        //free(rear);                              此处要不要释放rear空间
        
    }
    
    
    prift(head);                                  // 输出序列
    
   /***********************删除某个元素  */
    
    int serial;
    cout<<"删除元素字母,请输入元素序号:\t";
    cin>>serial;
    
    dele(head,serial);
    prift(head);
  
    return 0;
}



//输出函数的实现
void prift(Linklist *head0)
{
    Linklist *pf;
    pf=(Linklist *)malloc(sizeof(Linklist));
    
     for(pf=head;pf->next!=NULL;pf=pf->next)
    {
        cout<<pf->letter<<"\t";
    }
    cout<<pf->letter<<endl;
    
    return ;
    
}


//删除某个元素函数实现
void dele(Linklist *head0,int serial0)
{
    Linklist *rep;
    rep=(Linklist *)malloc(sizeof(Linklist));
    int m=0;
    
    while(rep->letter!=NULL)
    {
        if(serial0<1||serial0>26)
           {
                 cout<<"error!"<<endl;
           }
        
         else
         {
             while(m<serial0-1)          //寻找serial0的前一个节点
             {
                 rep=rep->next;
                 m++;
             }
             
             rep->next=rep->next->next;     //删除serial0 所指节点
             
             free(rep->next);                   
             break;
         }
    }
    
}