双向链表插入元素操作

发布于:2022-07-17 ⋅ 阅读:(288) ⋅ 点赞:(0)

如果链表里没有结点,那么就是空链表,
需要在头部添加元素,当然一个好的插入算法不需要这样子.
兼容性是所有的程序员必备技能.

如何到达兼容性?
还记得双向链表的添加元素操作?
双向链表添加操作 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

list.size 元素大于0

创建新结点

创建新结点

调用link函数

调用link函数

调用link函数

调用link函数

调用link函数

调用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;
}

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到