首页 > 解决方案 > 在链表尾部插入元素的插入函数

问题描述

我想在链表的尾部实现元素的插入,我想使用成员函数来做,目前我可以通过在结构之外创建一个函数来做到这一点,请帮助我应该修改什么来实现它作为成员功能。

我的常规方法:

#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;
    }
}

标签: c++singly-linked-listmember-function-pointers

解决方案


这是一个工作示例。这个想法是,从成员函数中递归调用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上现场观看

另外:避免using namespace std

添加

如评论中所述,展开递归可能是个好主意。这是上述代码的非递归版本:

#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上现场观看


推荐阅读