如果链表里没有结点,那么就是空链表,
需要在头部添加元素,当然一个好的插入算法不需要这样子.
兼容性是所有的程序员必备技能.
如何到达兼容性?
还记得双向链表的添加元素操作?
双向链表添加操作 web link
那里有一个link函数采用的是 兼容性,无论哪一个位置,甚至是 empty LinkList都可以进行插入
如何 做呢?
按照位置插入 : 最小值0 最大值是list.size
插入元素思路:
参数: list,pos,value
判断 pos|<=0吗
用c++ cerr 输出错误信息 pos 过于小
pos> list.size;
可以给机会 将pos修改为list.size;
定义一个用来找到pos的位置的结点
取名为current; 当前结点
一套循环 i<pos
根据i来判断 位置
current=current->next/找到下一个结点
直到==pos 退出循环
就找到了插入的位置
创建新结点 并且初始化数据域和指针域
将当前结点和新结点传入link函数
link函数 调用完毕后
当前链表个数+1
调用完毕!
list.size 一个元素都没有
创建新结点
调用link函数
调用link函数
更新链表个数
插入元素操作完成
list.size 元素大于0
创建新结点
调用link函数
调用link函数
调用link函数
调用link函数
link函数 调用完毕
更新链表个数
插入元素操作完成
链表插入操作
void LinkListInsert(LinkList& List, int pos, ElemType const& value) {
if (pos <= 0) {
cerr << "pos 过于小" << endl;
return;
}
else if (pos > List.size) {
pos = List.size;
}
int i = 0;
LinkNode* current = List.list;
for (; i++ < pos; ) {
current = current->next;
}
LinkNode* newNode = creatorLinkNode(value);
Link(current, newNode);
++List.size;
}