双向链表插入元素操作

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小森程序员

若能帮助到你,小费自愿付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值