单链表 | | 按位序插入&指定结点前插后插

 //在第i个位置上插入元素e(带头结点)
typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*LinkList;

bool ListInsert(LinkList &L ,int i,int e){
    if(i<1)
    return false;
    LNode *p;//指针p指向当前扫描结点 
    int j=0;//当前p指向的是第几个结点 
    P=L;//L指向头结点,头结点是第0个结点,不存放数据 
    if(p!=NULL&&j<i-1){//循环找到第i-1个结点
      p=p->next;
      j++; 
    }
    if(P==NULL)//i值不合法
     return false;
     LNode *s=(LNode*)malloc(sizeof(LNode));//申请结点 
s->data=e; s->next=p->next; p->next=s; return true; }



//按位序插入(不带头结点)插入删除第一个元素时需更改头指针L
bool ListInsert(LinkList &L ,int i,int e){
    if(i<1)
    return false;
    if(i==1)
    {
     LNode *s=(LNode*)malloc(sizeof(LNode));//申请结点 
     s->data=e;
     s->next=L;
     L=s;
     return true; 
    } 
    LNode *p;//指针p指向当前扫描结点 
    int j=1;//当前p指向的是第几个结点 
    P=L;//L指向头结点,头结点是第0个结点,不存放数据 
    if(p!=NULL&&j<i-1){//循环找到第i-1个结点
      p=p->next;
      j++; 
    }
    if(P==NULL)//i值不合法
     return false;
     LNode *s=(LNode*)malloc(sizeof(LNode));//申请结点 
     s->data=e;
     s->next=p->next;
     p->next=s;
     return true; 
} 

 


//在p结点之后插入元素e 
bool InsertNextNode(LNode *p,int e){
    if(p==NULL)
    return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    if(s==NULL)
     return false;//内存分配失败
     s->data=e;
     s->next=p->next;
     p->next=s;
     return true;
}

 

//在p结点之前插入元素e
bool InsertPriorNode(LinkList &L,LNode *p;int e){
    循环查找p的前驱q,再对q进行后插 
}

法二:
bool InsertPriorNode(LNode*p,int e){
    if(p=NULL)
    return false;
    LNode *s=(LNode*)malloc(sizeof(LNode));
    if(s==NULL)
    return false;
    s->next=p->next;
    p->next=s;
    s->data=p->data;
    p->data=e
    return true;
} 

 

posted @ 2020-04-16 21:07  iiiiiki  阅读(1114)  评论(0)    收藏  举报