指定结点的后插操作
cpp
#define NULL 0
typedef struct LNode
{
int data;
struct LNode* next;
}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;
}
bool ListInsert(LinkList& L, int i, int e) {
if (i < 1)
return false;
LNode* p = L; //指针p指向当前扫描结点,目前指向头结点,是第0个
int j = 0; //当前p指向第几个结点
while (p != NULL && j < i - 1) //循环指到第i-1个结点
{
p = p->next;
j++;
}
//return InsertNextNode(p, e);
return InsertPriorNode(p, e);
}
指定结点的前插操作
cpp
//前插操作:在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->data = p->data; // 将p中元素复制给s
p->data = e; // p中元素覆盖为e
return true;
}