单向链表添加元素操作

创建单向链表

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

添加元素操作

Size一个都没有的时候

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

前插法

意思就是往前添加元素

第一步 : 创建结点

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

函数声明

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

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

函数实现

LinkNode* creatorLinkNode(LinkNode* where){

	LinkNode* node = new LinkNode;
	node->next = where;
	return node;
		
}

LinkNode* creatorLinkNode(const ElemType& elem) {
	return new LinkNode{ elem ,nullptr};
}

创建结点
在这里插入图片描述

第二步 : 链接结点

链接结点
参数 LinkNode& node, LinkNode& newnode**
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点

相当于 3->5
4是新结点
4->5
4链接5
3的下一个结点指向4结点
3->4->5

伪代码::
如果(结点的next!=空指针){//为真
新结点的next指针指向 结点的next指针;;
}
结点的next指针指向 新结点;

函数声明

/*
链接结点
参数 LinkNode*& node, LinkNode*& newnode
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点

相当于 3->5
	   4是新结点
	   4->5
	   4链接5
	   3的下一个结点指向4结点
	   3->4->5

	   if(node->next){
	     newnode->next = node->next;
	   } 
	   node->next = newnode;		
*/
void Link(LinkNode*& node, LinkNode*& newnode)

函数实现

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

	if (node->next) {
		newnode->next = node->next;
	}
	node->next = newnode;
}
链接 第一步

链接 第一步

链接 第二步

链接 第二步

第三步 把链表的头结点传递到Link函数
Link(List.list, Newnode);
第四步 链表的个数+1
++List.size;

前插法 代码

//LinkNode* &Newnode  主调函数 分配内存
void LinkListInsert_froot(LinkList& List, LinkNode* &Newnode) {
	Link(List.list, Newnode);
	++List.size;
}

尾插法

意思就是靠后添加元素

第一步 : 创建结点

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

函数声明

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

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

函数实现

LinkNode* creatorLinkNode(LinkNode* where){

	LinkNode* node = new LinkNode;
	node->next = where;
	return node;
		
}

LinkNode* creatorLinkNode(const ElemType& elem) {
	return new LinkNode{ elem ,nullptr};
}

创建结点
在这里插入图片描述

循环找到末尾结点

在这里插入图片描述

在这里插入图片描述

	while (current->next){

		current = current->next;
	}
第二步 : 链接结点

链接结点
参数 LinkNode& node, LinkNode& newnode**
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点

相当于 3->5
4是新结点
4->5
4链接5
3的下一个结点指向4结点
3->4->5

伪代码::
如果(结点的next!=空指针){//为真
新结点的next指针指向 结点的next指针;;
}
结点的next指针指向 新结点;

函数声明

/*
链接结点
参数 LinkNode*& node, LinkNode*& newnode
链接思路:
如果(node->next)不是空指针
新结点的下一个结点指向传入结点的下一个结点
否则
结点的下一个结点指向新结点

相当于 3->5
	   4是新结点
	   4->5
	   4链接5
	   3的下一个结点指向4结点
	   3->4->5

	   if(node->next){
	     newnode->next = node->next;
	   } 
	   node->next = newnode;		
*/
void Link(LinkNode*& node, LinkNode*& newnode)

函数实现

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

	if (node->next) {
		newnode->next = node->next;
	}
	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、付费专栏及课程。

余额充值