首页 > 解决方案 > 在 C++ 中指定插入或附加到链表

问题描述

如果数字是奇数,我想在将值添加到链表之前确保我想将它添加到头部(我的别名是左边的)如果我想将它添加到最后一个(我的别名是正确的)这是我的代码节点结构

struct Node{
    int data;
    Node *next;
};

链表类

class LinkedList{
    Node *left;
    Node *right;
    
    public:
        LinkedList(){
            left = NULL;
            right = NULL;
        };
    void insert(int value)
    {
        Node *t = new Node();
        t->data = value;

        t->next = left;
        
        left = t;
        
        if(right == NULL)
            right = t;
    }
    void append(int value)
    {
        Node *temp = new Node();
        temp->data = value;
        
        temp->next = NULL;
        
        right = temp;
        
        if(left == NULL)
            left = temp;
    }
    void add(int  value){
        if(value % 2 == 0)
            append(value);
        else
            insert(value);
    }
    void print(){
    Node *node = left;
        while(node != NULL)
        {
            cout << node->data << " ";
            node = node->next;
        }
    }
};

在主要方法中

LinkedList list = LinkedList();
    list.add(9);
    list.add(16);
    list.add(12);
    list.add(12);
    list.add(7);
    list.print();

但输出是:

12 12 16 9

标签: c++linked-list

解决方案


您忘记将最后一个(最右边的)节点链接到append(). 在更新之前right,您需要添加:

if(right != nullptr) { right->next = temp; }

所以它会变成:

void append(int value)
{
    Node *temp = new Node();
    temp->data = value;
    temp->next = NULL;

    if(right != nullptr) { right->next = temp; } 
    right = temp;
    
    if(left == NULL)
        left = temp;
}

也不要忘记你的析构函数/复制构造函数/赋值运算符,以确保你分配的内存是安全的!


推荐阅读