//在第i个位置插入元素e(带头结点)
bool ListInsert(LinkList &L, int i, ElemType e) {
if (i < 1) return true;
//LNode *p = GetElem(L, i - 1);//找到第i-1个节点
LNode *p;//指针指向当前扫描的节点
int j = 0;//当前p指向的是第几个节点
p = L;//L指向头结点,头结点是第0个节点(不存数据)
while (p != NULL && j < i - 1) {//循环找到第i个节点
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;//将节点s连到p之后
return true;//插入成功
}`
//后插操作
bool InsertNextNode(LNode *p, ElemType e) {
if (p == NULL)//i值不合法
return false;
LNode *s = (LNode *)malloc(sizeof(LNode));
if (s == NULL)//内存分配失败
return NULL;
s->data = e;
s->next = p->next;
p->next = s;//将节点s连到p之后
return true;//插入成功
}
//按位序插入(不带头结点)
bool ListInsertNH(LinkList &L, int i, ElemType 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;//p指向第一个节点(不是头结点)
while (p != NULL && j < i - 1) {//循环找到第i个节点
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;//将节点s连到p之后
return true;//插入成功
}
//指定节点的前插操作
bool InsertPriorNode(LNode *p, ElemType 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;
}
``
单链表的插入
最新推荐文章于 2023-11-19 10:29:47 发布