21xrx.com
2024-09-19 09:56:43 Thursday
登录
文章检索 我的文章 写文章
如何用C++创建列表
2023-07-02 09:16:49 深夜i     --     --
C++ 列表 创建 数据结构 链表

在C++编程中,列表是常见的数据结构之一,它可以存储一系列的元素,并且支持快速的插入和删除操作。在本文中,我们将介绍如何使用C++语言创建一个简单的列表。

Step1:定义列表数据结构

我们可以使用类来定义列表数据结构。在类中,我们需要定义列表节点的结构,包括节点的值和指向下一个节点的指针。同时,我们还需要定义列表的头部指针和尾部指针。

class ListNode {

public:

  int val;

  ListNode *next;

  ListNode(int x) : val(x), next(nullptr) {}

};

class MyList {

public:

  ListNode *head;

  ListNode *tail;

  MyList() : head(nullptr), tail(nullptr) {}

};

Step2:添加元素到列表中

要添加一个元素到列表中,我们需要先创建一个列表节点,并将其值设置为待添加的元素。然后,将该节点添加到列表的尾部。如果列表为空,我们需要同时设置头部和尾部指针为新节点。

void addToList(MyList &list, int val) {

  ListNode *node = new ListNode(val);

  if (list.head == nullptr)

    list.head = node;

    list.tail = node;

   else

    list.tail->next = node;

    list.tail = node;

}

Step3:从列表中删除元素

要从列表中删除一个元素,我们需要先找到该元素所在的节点,并将其从列表中移除。如果要删除的元素是列表的头部元素,我们需要同时更新头部指针。

void removeFromList(MyList &list, int val) {

  ListNode *node = list.head;

  ListNode *prev = nullptr;

  while (node != nullptr) {

    if (node->val == val) {

      if (prev == nullptr)

        list.head = node->next;

       else

        prev->next = node->next;

      delete node;

      return;

    }

    prev = node;

    node = node->next;

  }

}

Step4:遍历列表

要遍历列表,我们可以从头部节点开始,依次遍历每个节点,并输出节点的值。

void traverseList(MyList &list) {

  ListNode *node = list.head;

  while (node != nullptr)

    cout << node->val << " ";

    node = node->next;

  cout << endl;

}

完整代码如下:

#include

using namespace std;

class ListNode {

public:

  int val;

  ListNode *next;

  ListNode(int x) : val(x), next(nullptr) {}

};

class MyList {

public:

  ListNode *head;

  ListNode *tail;

  MyList() : head(nullptr), tail(nullptr) {}

};

void addToList(MyList &list, int val) {

  ListNode *node = new ListNode(val);

  if (list.head == nullptr)

    list.head = node;

    list.tail = node;

   else

    list.tail->next = node;

    list.tail = node;

}

void removeFromList(MyList &list, int val) {

  ListNode *node = list.head;

  ListNode *prev = nullptr;

  while (node != nullptr) {

    if (node->val == val) {

      if (prev == nullptr)

        list.head = node->next;

       else

        prev->next = node->next;

      delete node;

      return;

    }

    prev = node;

    node = node->next;

  }

}

void traverseList(MyList &list) {

  ListNode *node = list.head;

  while (node != nullptr)

    cout << node->val << " ";

    node = node->next;

  cout << endl;

}

int main() {

  MyList list;

  addToList(list, 1);

  addToList(list, 2);

  addToList(list, 3);

  traverseList(list);

  removeFromList(list, 2);

  traverseList(list);

  return 0;

}

  
  

评论区

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