双向链表添加元素操作

创建双向链表

先创建链表并且初始化
创建双向链表

添加元素操作

Size一个都没有的时候

Size一个都没有的时候
证明是空链表

前插法

意思就是往前添加元素

第一步 : 创建结点

可以用C++ 的 new 创建结点 或者 用面向过程 的 function 来 创建

函数声明

//创建双向链表结点 
//创建链表头结点的函数
//参数:LinkNode* where = nullptr  
//LinkNode* where目的是给list->next赋值和list->prev不初始化数据域
LinkNode* creatorLinkNode(LinkNode* where = nullptr);

//创建双向链表结点 
//参数:const ElemType &elem  
//const ElemType &elem 目的是给 新结点的数据域初始化、不初始化指针域
LinkNode* creatorLinkNode(const ElemType& elem);

函数实现

LinkNode* creatorLinkNode(LinkNode* where) {

	LinkNode* newNode = new LinkNode;
	newNode->prev = where;
	newNode->next = where;
	return newNode;

}

LinkNode* creatorLinkNode(const ElemType& elem) {
	LinkNode* newNode = new LinkNode{ elem };
	return newNode;
}

创建结点
创建结点

第二步 : 链接结点

函数声明

void Link(LinkNode*& node, LinkNode*& newnode);

函数实现

void Link(LinkNode*& node, LinkNode*& newnode) {

	if (node->next){

		node->next->prev = newnode;
		newnode->next = node->next;
	}
	newnode->prev = node;
	node->next = newnode;
}
链接结点操作:
第一步

链接第一步

第二步

链接第二步

第三步

把链表的头结点传递到Link函数

Link(List.list, Newnode);
第四步 链表的个数+1
++List.size;
前插法添加完成

前插法添加成功
前插法 代码

void LinkListInsert_froot(LinkList& List, LinkNode*& Newnode) {
	Link(List.list, Newnode);
	++List.size;
}

后插法

意思就是往前添加元素

第一步 : 创建结点

可以用C++ 的 new 创建结点 或者 用面向过程 的 function 来 创建

函数声明

//创建双向链表结点 
//创建链表头结点的函数
//参数:LinkNode* where = nullptr  
//LinkNode* where目的是给list->next赋值和list->prev不初始化数据域
LinkNode* creatorLinkNode(LinkNode* where = nullptr);

//创建双向链表结点 
//参数:const ElemType &elem  
//const ElemType &elem 目的是给 新结点的数据域初始化、不初始化指针域
LinkNode* creatorLinkNode(const ElemType& elem);

函数实现

LinkNode* creatorLinkNode(LinkNode* where) {

	LinkNode* newNode = new LinkNode;
	newNode->prev = where;
	newNode->next = where;
	return newNode;

}

LinkNode* creatorLinkNode(const ElemType& elem) {
	LinkNode* newNode = new LinkNode{ elem };
	return newNode;
}

创建结点
创建结点

循环找到末尾结点

循环找到末尾结点

第二步 : 链接结点

函数声明

void Link(LinkNode*& node, LinkNode*& newnode);

函数实现

void Link(LinkNode*& node, LinkNode*& newnode) {

	if (node->next){

		node->next->prev = newnode;
		newnode->next = node->next;
	}
	newnode->prev = node;
	node->next = newnode;
}
链接结点操作:
第一步链接第一步
第二步链接第二步
第三步

把current传递到Link函数

Link(current, Newnode);
第四步 链表的个数+1
++List.size;
尾插法添加完成

尾插法成功
尾插法 代码

void LinkListInsert_back(LinkList& List, LinkNode*& Newnode) {
	
	LinkNode* current = List.list;
	while (current->next) {

		current = current->next;
	}
	
	Link(current, Newnode);
	++List.size;	
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小森程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值