21xrx.com
2024-12-27 22:23:25 Friday
登录
文章检索 我的文章 写文章
C++单链表完整代码
2023-06-30 12:34:17 深夜i     --     --
C++ 单链表 完整代码

单链表是一种数据结构,它由若干个节点组成,每个节点存储数据和指向下一个节点的指针。C++单链表使用指针来实现,是C++程序员经常使用的数据结构之一。

下面是C++单链表的完整代码实现:


#include <iostream>

using namespace std;

//定义单链表节点

struct ListNode {

  int val;

  ListNode *next;

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

};

class LinkedList {

public:

  // 初始化链表

  LinkedList()

    head = nullptr;

    tail = nullptr;

  

  

  // 在链表尾部添加节点

  void addTail(int val) {

    ListNode *node = new ListNode(val);

    if (!head)

      head = node;

      tail = node;

     else

      tail->next = node;

      tail = node;

    

  }

  

  // 在链表头部添加节点

  void addHead(int val) {

    ListNode *node = new ListNode(val);

    if (!head)

      head = node;

      tail = node;

     else

      node->next = head;

      head = node;

    

  }

  

  // 在链表的指定位置插入节点

  void insert(int pos, int val) {

    if (pos == 0) {

      addHead(val);

      return;

    }

    int idx = 1;

    ListNode *curr = head;

    while (curr && idx < pos) {

      curr = curr->next;

      idx++;

    }

    if (curr) {

      ListNode *node = new ListNode(val);

      node->next = curr->next;

      curr->next = node;

      if (node->next == nullptr)

        tail = node;

      

    }

  }

  

  // 获取链表长度

  int getLength() {

    int len = 0;

    ListNode *curr = head;

    while (curr) {

      curr = curr->next;

      len++;

    }

    return len;

  }

  

  // 删除节点

  void deleteNode(int val) {

    ListNode *prev = nullptr;

    ListNode *curr = head;

    while (curr && curr->val != val)

      prev = curr;

      curr = curr->next;

    

    if (curr) {

      if (curr == head)

        head = head->next;

        delete curr;

       else {

        prev->next = curr->next;

        if (curr->next == nullptr)

          tail = prev;

        

        delete curr;

      }

    }

  }

  

  // 打印链表

  void print() {

    ListNode *curr = head;

    while (curr)

      cout << curr->val << "->";

      curr = curr->next;

    

    cout << "NULL" << endl;

  }

  

private:

  ListNode *head, *tail;

};

int main() {

  LinkedList list;

  list.addTail(1);

  list.addTail(2);

  list.addTail(3);

  list.insert(2, 4);

  list.deleteNode(2);

  list.print();

  return 0;

}

在这个程序中,我们定义了一个链表类`LinkedList`,它包含了添加节点、删除节点、插入节点、获取链表长度、打印链表等方法。我们通过`ListNode`结构体定义链表节点。

链表的头节点和尾节点由指针`head`和`tail`表示,它们的初始值为空指针。在添加节点、删除节点、插入节点等方法中,我们使用指针对节点进行操作,实现对链表的修改。在链表的打印方法中,我们使用循环打印链表中的每个节点的值。

在程序的`main`函数中,我们创建了一个`LinkedList`对象,并调用了它的一些方法,如添加节点、插入节点、删除节点和打印链表等。

这个程序提供了一个完整的C++单链表实现,可以用于解决各种问题和练习。如果你想了解更多关于链表的知识,请参考我们的其他教程。

  
  

评论区

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