21xrx.com
2024-11-05 18:51:10 Tuesday
登录
文章检索 我的文章 写文章
C++如何定义链表?
2023-07-13 05:48:03 深夜i     --     --
C++ 链表 定义

在C++中,我们可以使用类来定义链表。链表是由若干个节点(link)组成的数据结构,每个节点包含数据和指向下一个节点的指针。

首先,我们需要定义一个节点类。节点类包含两个成员变量,一个存储数据的变量和一个指向下一个节点的指针。代码如下:


class Node {

public:

  int data;

  Node* next;

};

接下来,我们可以定义一个链表类,它包含一个头节点和一些用于操作链表的成员函数。头节点是链表中的第一个节点,它不存储任何数据,只是用于表示链表的开始。代码如下:


class LinkedList {

private:

  Node* head;

public:

  LinkedList();

  void insert(int data);

  void remove(int data);

  void print();

};

在链表类的构造函数中,我们需要初始化头节点,将其指针设置为空。代码如下:


LinkedList::LinkedList()

  head = nullptr;

链表的插入操作是将一个新节点插入到链表的末尾。我们需要先创建一个新节点,然后找到链表最后一个节点,将其指针指向新节点。如果链表为空,则将头节点指向新节点。代码如下:


void LinkedList::insert(int data) {

  Node* newNode = new Node;

  newNode->data = data;

  newNode->next = nullptr;

  

  if (head == nullptr)

    head = newNode;

   else {

    Node* curr = head;

    while (curr->next != nullptr)

      curr = curr->next;

    

    curr->next = newNode;

  }

}

链表的删除操作是将指定值的节点从链表中删除。我们需要先找到指定值的节点,然后将其前置节点指向其后置节点。代码如下:


void LinkedList::remove(int data) {

  if (head == nullptr)

    return;

  

  

  if (head->data == data) {

    Node* temp = head;

    head = head->next;

    delete temp;

    return;

  }

  

  Node* curr = head;

  while (curr->next != nullptr && curr->next->data != data)

    curr = curr->next;

  

  

  if (curr->next != nullptr) {

    Node* temp = curr->next;

    curr->next = curr->next->next;

    delete temp;

  }

}

最后,我们还需要一个打印函数,可以将链表中的所有元素打印出来。代码如下:


void LinkedList::print() {

  Node* curr = head;

  while (curr != nullptr)

    cout << curr->data << " ";

    curr = curr->next;

  

  cout << endl;

}

以上就是C++定义链表的方法。链表虽然比数组稍微复杂一些,但它具有很多优势,如可以动态地添加和删除元素,也可以方便地进行反转操作,因此在编程中经常被用到。

  
  
下一篇: C++套接字编程

评论区

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