单链表指定结点的前插与后插(C/C++)

typedef struct LNode{
          
   
    int data;
    struct LNode* next;
}LNode, *LinkList; //这里LNode 和 *LinkList 等价,只不过LNode更强调一个结点,LinkList更强调一个链表。

//指定结点的后插操作:在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保存数据元素e
    s -> next = p -> next;
    p -> next = s; //将结点s连到p之后
    return true;
}

//指定结点的前插操作:在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; //新结点s连接到p之后
    s -> data = p -> data; //将p中元素复制到s中
    p -> next = s;
    p -> data = e; //将e赋值给p结点
    return true;
}

前插法示意

经验分享 程序员 微信小程序 职场和发展