这一篇文章讲单链表的插入与删除:
1.首先通过尾插法函数来创建一个单链表:
listnode CreatlistTail(listnode* L, int a[], int len) {
listnode* r = L;
for (int i = 0; i < len; i++) {
listnode* trans = new listnode; //创建想要插入的新成员结构
trans->value = 0;
trans->next = NULL; //以上三句初始化均为新的listnode链表成员
trans->value = a[i]; //创建一个待插入的指针
r->next = trans; //将头节点指向新成员,因为是尾插法,这一步显得十分简单
r = trans; //将最新的头节点存储到地址r上,上面说过了
}
return *L;
}
2.下面是单链表的插入函数
listnode ListnodeInsert(listnode* L,int index,int value) { //链表插入函数
int i = 0;
int answer = 0; //初始相关寻找索引的参数
listnode* trans = new listnode;
listnode* p = L;
trans->value = value;
trans->next = NULL; //以上是创建想要插入的单链表成员
if (L->next == NULL) { //判断链表是否为空 等等这好像不需要 哈哈
cout << "此列表为空!" << endl;
}
while (p&&(i+1) < index) { //定位到要插入的位置
p = p->next;
i++;
}
if (!p || (i+1) > index) { //判断是否是超限错误
cout << "输入参数错误!(返回原始链表)" << endl;
return *L;
}
trans->next = p->next; //进行插入操作
p->next = trans;
return *L;
}
3.单链表成员删除操作
listnode ListnodeDelete(listnode* L, int index) { //删除指定位置上的数据
listnode* p = L;
listnode* r;
int i = 0;
if (L->next == NULL) {
cout << "此列表为空!" << endl;
}
while (p&&i < index) { //定位到要删除的位置
p = p->next;
i++;
}
if (!p || i < index) {
cout << "输入参数错误!(返回原始链表)" << endl;
return *L;
}
r = p->next; //删除操作
p->next = r->next;
free(r);
return *L;
}
4.main函数显示效果:
int main() {
listnode test;
int aa[5] = { 1,2,3,4,5 };
test = CreatlistTail(&test, aa, 5);
cout << "插入数据前:" << endl;
showlist(&test);
test = ListnodeInsert(&test, 2, 9);
cout << "插入数据后:" << endl;
showlist(&test);
cout << "删除刚才插入的数据:" << endl;
test = ListnodeDelete(&test, 10);
showlist(&test);
system("pause");
return 0;
}