c++ - 在链表尾部插入元素的插入函数
问题描述
我想在链表的尾部实现元素的插入,我想使用成员函数来做,目前我可以通过在结构之外创建一个函数来做到这一点,请帮助我应该修改什么来实现它作为成员功能。
我的常规方法:
#include<iostream>
using namespace std;
struct node{
int data;
node *next;
};
node * Insert(int v,node *head){
if(head==NULL){
node *temp=new node;
head=temp;
temp->data=v;
temp->next=NULL;
return head;
}
else{
node *temp=head;
while(temp->next!=NULL){
temp=temp->next;
}
node *temp_new=new node;
temp_new->data=v;
temp_new->next=NULL;
temp->next=temp_new;
return head;
}
}
解决方案
这是一个工作示例。这个想法是,从成员函数中递归调用node::Insert
,直到到达最后一个元素,然后才在那里创建下一个元素。
#include <iostream>
struct node{
int data;
node *next = nullptr;
node *Insert(int v);
};
node *node::Insert(int v)
{
if (next == nullptr)
{
next = new node;
next->data = v;
return next;
}
else
{
return next->Insert(v);
}
}
int main()
{
node a{3};
a.Insert(2);
a.Insert(5);
std::cout << a.data << ' ' << a.next->data << ' ' << a.next->next->data << ' ' << std::endl;
return 0;
}
在 Coliru上现场观看。
添加
如评论中所述,展开递归可能是个好主意。这是上述代码的非递归版本:
#include <iostream>
struct node{
int data;
node *next = nullptr;
node *Insert(int v);
};
node *node::Insert(int v)
{
if (next == nullptr)
{
next = new node;
next->data = v;
return next;
}
else
{
auto p = next;
while (p->next != nullptr)
p = p->next;
p->next = new node;
p = p->next;
p->data = v;
return p;
}
}
int main()
{
node a{3};
a.Insert(2);
a.Insert(5);
std::cout << a.data << ' ' << a.next->data << ' ' << a.next->next->data << ' ' << std::endl;
return 0;
}
在 Coliru上现场观看。
推荐阅读
- android - 使用 Google 开发人员密钥签署 APK 后,支持 MirrorLink 的应用验证器失败
- android - Room SQLite 查询不返回任何结果,即使数据库中有匹配的行
- javascript - 如何根据对象的属性加载动态组件?
- android - 颤动更改所选选项卡的背景
- arrays - 具有三个维度的 Sub2ind - 访问所有维度
- powershell - 用于在 Citrix VDI 上模拟键盘按下的 SendKey 替代方案
- sql-server - 如何在 SSAS 或 Power BI 中创建从表格模型的元数据中提取信息的 DAX 度量?
- r - Y~0|X1+X2... 语法是什么意思
- php - 您可以手动将列添加到 laravel postgre 数据库吗
- ajax - What are the possible ajax events for a primefaces InputText?