21xrx.com
2024-12-22 23:43:53 Sunday
登录
文章检索 我的文章 写文章
如何在C++中创建链表
2023-07-04 19:33:34 深夜i     --     --
C++ 链表 创建 节点 数据结构

链表是一种常用的数据结构,由多个节点组成,其中每个节点包含一个值和指向下一个节点的指针。在C++中,可以使用类和指针来创建链表。

首先,定义一个节点类,该类包含一个值和指向下一个节点的指针。可以将其定义为以下类:


class Node {

public:

  int data;

  Node* next;

  Node(int val)

    data = val;

    next = nullptr;

  

};

该类包含一个构造函数,该构造函数接受一个值并将其分配给节点的data成员。next指针初始化为nullptr,表示此节点是链表的结尾。

接下来,定义链表类,该类包含对链表进行操作的各种方法,例如插入节点和删除节点。可以将其定义为以下类:


class LinkedList {

public:

  Node* head;

  LinkedList()

    head = nullptr;

  

  ~LinkedList() {

    Node* current = head;

    while (current != nullptr) {

      Node* nextNode = current->next;

      delete current;

      current = nextNode;

    }

  }

  void insert(int val);

  void remove(int val);

};

该类包含一个构造函数,该函数初始化链表的head指针为nullptr,表示链表为空。该类还包含一个析构函数,该函数会删除链表的每个节点,以免内存泄漏。

为了在链表中插入节点,请定义insert方法:


void LinkedList::insert(int val) {

  Node* newNode = new Node(val);

  if (head == nullptr)

    head = newNode;

  

  else {

    Node* current = head;

    while (current->next != nullptr)

      current = current->next;

    

    current->next = newNode;

  }

}

该方法创建一个新节点,并根据链表是否为空,将其分配给链表的head指针或添加到链表的末尾。要从链表中删除节点,请定义remove方法:


void LinkedList::remove(int val) {

  if (head == nullptr)

    return;

  

  if (head->data == val) {

    Node* current = head;

    head = head->next;

    delete current;

  }

  else {

    Node* current = head;

    while (current->next != nullptr && current->next->data != val)

      current = current->next;

    

    if (current->next != nullptr) {

      Node* nodeToRemove = current->next;

      current->next = nodeToRemove->next;

      delete nodeToRemove;

    }

  }

}

该方法根据该节点的值查找要删除的节点。如果找到了要删除的节点,则删除并重新链接链表中的节点。

最后,可以在主函数中使用链表类来创建和操作链表:


int main() {

  LinkedList list;

  list.insert(1);

  list.insert(2);

  list.insert(3);

  list.remove(2);

  return 0;

}

此代码片段创建了一个名为list的LinkedList对象,并在其中插入了三个节点。然后,它使用remove方法从链表中删除值为2的节点。

通过这些步骤,可以创建一个简单的链表并执行插入和删除操作。如果需要更多高级功能,可以继续扩展该链表类。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复