| 
         
          /*所cur_e是L中的数据元素,且给就第一个,则用pre_e返回它的前驱*/ 
          Status PriorElem(struct LNode *L,ElemType cur_e,ElemType *pre_e) 
          { 
            LinkList *q,*p=L->next; 
            while(p->next) 
            { 
              q = p->next;//q指向p的后继 
           
              if(q->data == cur_e) 
              { 
                *pre_e = p->data; 
                return OK; 
              } 
              p = q; 
            } 
            return INFEASIBLE; 
             
          } 
          /* 若cur_e是L中的数据元素,且不是最后一个,则用next_e返回它的后继*/ 
          Status NextElem(struct LNode *L,ElemType cur_e,ElemType *next_e) 
          { 
            LinkList *p; 
            p = L->next; 
            while(p->next) 
            { 
              if(p->data == cur_e) 
              { 
               * next_e = p->next->data; 
                return OK; 
              } 
              p = p->next; 
            } 
            return INFEASIBLE; 
          } 
          /* 在带头节点的单链表L中的第i个位置之前插入元素e*/ 
          Status ListInsert(struct LNode *L,int i,ElemType e) 
          { 
            int j =0; 
            struct LNode *p=L,*s=NULL; 
            while(p && j<i-1) 
            { 
              p=p->next; 
              j++; 
            } 
            if(!p || j>i-1) 
              return ERROR; 
            s = (struct LNode *)malloc(sizeof(struct LNode)); 
            if(!s) 
              printf("malloc error~\n"); 
            // p->next = s; 
           
            s->data = e; 
            // p->next = s; 
           
             s->next = p->next; 
             p->next = s; 
             //s->next = NULL; 
           
            // p = s; 
           
            return OK; 
          } 
          /*在带头节点的单链表中删除第i个元素,并有e返回其值*/ 
          Status ListDelete(LinkList *L,int i,ElemType *e) 
          { 
            
            LinkList *p=L,*q; 
             
             int j=0; 
            while(p->next && j< i-1) 
            { 
              p = p->next; 
              j++; 
            } 
           
            if(!p->next || j>i-1) 
              return ERROR; 
            q = p->next; 
            p->next = q->next; 
            *e = q->data; 
            free(q); 
            return OK; 
            } 
          /* 依次对L的每个元素调用vi(),打印输出语句*/ 
          Status ListTraverse(struct LNode *L,void (*vi)(ElemType)) 
          { 
            LinkList *p = L->next; 
            while(p) 
            { 
              vi(p->data); 
              p = p->next; 
            } 
            printf("\n"); 
            return OK; 
          }
         
       |