数据结构单链表:指定结点的前插、后插操作

指定结点的前插操作

typedef struct LNode{
    int data;
    struct LNode *next;
}LNode, *LinkList;

//在p结点之前插入元素e
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连到p之后
    s->data = p->data;     //将p中元素复制到s中
    p->data = e;           //p中元素覆盖为e
    return true;
}

//核心思想:由于没法直接找到p结点的前结点,可以先把s结点插入p结点之后,
//再把p结点的数据复制到s结点,最后把p中数据赋值为新插入值e。

指定结点的后插操作

typedef struct LNode{
    int data;
    struct LNode *next;
}LNode, *LinkList;

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;           //将结点s连到p之后
    return true;
}
经验分享 程序员 微信小程序 职场和发展