C++中单链表操作的示例代码

我可以为您讲解C++中单链表的操作及示例代码。具体流程如下:

单链表操作的介绍

单链表是一种常见的数据结构,它由多个节点(结构体)组成,每个节点中都包含了下一个节点的指针。它的特点是插入和删除操作非常高效,但是访问操作需要遍历整个链表,效率较低。

单链表的结构体

首先,我们需要定义一个节点的结构体,来表示链表中的每个元素。例如:

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

其中,val表示节点中存储的元素值,next表示指向下一个节点的指针。

单链表的遍历

要遍历单链表,可以从头节点开始,沿着链表的每个节点,不断读取节点的值。示例代码如下:

void traverseList(Node *head) {
  Node *cur = head;
  while (cur != nullptr) {
    // 处理节点值
    cout << cur->val << " ";
    cur = cur->next;
  }
}

其中,head表示链表的头节点,cur表示当前节点的指针。通过while循环,不断将cur指针向后移动,直到遍历完整个链表。

单链表的插入

如果我们想在链表中插入一个元素,可以在遍历链表时找到合适的位置,并将新节点插入在该位置之后。示例代码如下:

void insertToList(Node *head, int val) {
  Node *cur = head;
  while (cur->next != nullptr && cur->next->val < val) {
    cur = cur->next;
  }
  Node *newNode = new Node({val, cur->next});
  cur->next = newNode;
}

其中,head表示链表的头节点,val表示要插入的元素值。在while循环中,不断将cur指针向后移动,直到找到需要插入的位置。然后,使用new关键字创建一个新节点,将val和cur->next作为参数传递,构造新的节点。最后将新节点插入到链表中。

单链表的删除

如果我们想在链表中删除一个元素,可以在遍历链表时找到该元素所在的位置,并将该节点删除。示例代码如下:

void deleteFromList(Node *head, int val) {
  Node *cur = head;
  while (cur->next != nullptr && cur->next->val != val) {
    cur = cur->next;
  }
  if (cur->next != nullptr && cur->next->val == val) {
    Node *temp = cur->next;
    cur->next = cur->next->next;
    delete temp;
  }
}

其中,head表示链表的头节点,val表示要删除的元素值。在while循环中,不断将cur指针向后移动,直到找到需要删除的位置。然后,将cur->next的指针指向下一个节点(即删除该节点),并使用delete关键字释放该节点的内存空间。

示例说明

下面给出两个简单的示例说明:

示例一

假如我们要实现一个链表,并按照从小到大的顺序插入元素,并打印出链表中的元素值。代码如下:

#include <iostream>
using namespace std;

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

void insertToList(Node *head, int val) {
  Node *cur = head;
  while (cur->next != nullptr && cur->next->val < val) {
    cur = cur->next;
  }
  Node *newNode = new Node({val, cur->next});
  cur->next = newNode;
}

void traverseList(Node *head) {
  Node *cur = head;
  while (cur != nullptr) {
    cout << cur->val << " ";
    cur = cur->next;
  }
}

int main() {
  Node *head = new Node({-1, nullptr});
  insertToList(head, 3);
  insertToList(head, 1);
  insertToList(head, 2);
  traverseList(head->next);
  return 0;
}

该示例代码会输出:1 2 3

示例二

假如我们要从一个链表中删除一个元素,并打印出链表中的元素值。代码如下:

#include <iostream>
using namespace std;

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

void deleteFromList(Node *head, int val) {
  Node *cur = head;
  while (cur->next != nullptr && cur->next->val != val) {
    cur = cur->next;
  }
  if (cur->next != nullptr && cur->next->val == val) {
    Node *temp = cur->next;
    cur->next = cur->next->next;
    delete temp;
  }
}

void traverseList(Node *head) {
  Node *cur = head;
  while (cur != nullptr) {
    cout << cur->val << " ";
    cur = cur->next;
  }
}

int main() {
  Node *head = new Node({-1, nullptr});
  Node *p = new Node({1, nullptr});
  head->next = p;
  Node *q = new Node({2, nullptr});
  p->next = q;
  Node *r = new Node({3, nullptr});
  q->next = r;
  deleteFromList(head, 2);
  traverseList(head->next);
  return 0;
}

该示例代码会输出:1 3

这就是关于C++中单链表操作的示例代码的完整攻略,希望能对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中单链表操作的示例代码 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • ftime()系统时间

    以下是关于“ftime()系统时间”的完整攻略,包括定义、方法、示例说明和注意事项。 定义 ftime()是一个C/C++函数,用于获取当前系统时间。它返回一个timeb体,包含当前时间的秒数和毫秒数。 方法 以下是使用ftime()获取系统时间的方法: 包含头文件 c++ #include <sys/timeb.h> 在使用ftime()函数之…

    other 2023年5月8日
    00
  • 苹果13怎么看内存 苹果13储存空间在哪看

    苹果13内存和储存空间的查看攻略 苹果13是一款备受期待的智能手机,它具有强大的内存和储存空间。下面是详细的攻略,教你如何查看苹果13的内存和储存空间。 查看内存 苹果13的内存可以通过以下步骤进行查看: 打开设置:在主屏幕上找到并点击“设置”图标。 进入“通用”选项:在设置界面中,向下滚动并点击“通用”选项。 进入“关于本机”:在通用界面中,向下滚动并点击…

    other 2023年7月31日
    00
  • centos7启动mysql服务

    以下是关于“CentOS 7启动MySQL服务”的完整攻略: 步骤1:检查MySQL是否已安装 在启动MySQL服务之前,需要检查MySQL是否安装在CentOS 7系统。可以使用以下命令检查MySQL是否已安装: rpm -qa | grep mysql 如果系统已经安装了MySQL,则会显示的版本号。如果系统上没有安装MySQL,则不会显示任何输出。 步…

    other 2023年5月7日
    00
  • [Nginx]Nginx的一些概念

    [Nginx] Nginx的一些概念 什么是Nginx? Nginx是一款高性能的Web服务器,也可以用作反向代理服务器、负载均衡器、HTTP缓存、HTTP媒体流服务器等。其设计目的是为了解决C10K问题,即支持高并发连接,又能够保证高性能。 Nginx的主要特点 高并发支持 Nginx的事件驱动模型非常适合处理高并发连接,它可以在相对较少的资源下处理大量的…

    其他 2023年3月28日
    00
  • 在CentOS系统中锁定软件版本阻止升级的方法

    在CentOS系统中锁定软件版本阻止升级的方法 以下是在CentOS系统中锁定软件版本阻止升级的完整攻略: 步骤1:查看已安装软件的版本 在命令行中执行以下命令,查看已安装软件的版本: rpm -qa | grep <软件名称> 示例代码: rpm -qa | grep nginx 步骤2:锁定软件版本 使用yum命令的versionlock插件…

    other 2023年10月13日
    00
  • window关闭端口的方法(445/135/137/138/139/3389等)

    以下是“Windows关闭端口的方法(445/135/137/138/139/3389等)”的完整攻略,包括过程中的两个示例说明。 Windows关闭端口的方法 在Windows系统中,有一些端是常见的攻击目标,例如445、135、137、138、139、3389等端口。为了保护系统安全,我们需要关闭这些端口。以下是一份关于Windows关闭端口的方法的攻略…

    other 2023年5月10日
    00
  • C++提取文件名与提取XML文件的方法详解

    C++提取文件名与提取XML文件的方法详解 C++ 是一种高效、通用的编程语言,常用于开发系统软件、应用程序、游戏等。在程序开发中,需要经常操作文件和解析 XML 文件。本文将详细讲解 C++ 中提取文件名和提取 XML 文件的方法。 提取文件名 在 C++ 中,可以使用 basename 函数来提取文件名。basename 函数定义在 libgen.h 头…

    other 2023年6月26日
    00
  • Git工具 conflict冲突问题解决方案

    Git工具是一个非常强大和流行的版本控制工具,可以很好地协调多人开发项目时的代码管理。但是在多人协作的过程中,很容易发生冲突导致代码无法合并的情况。本文将针对Git工具中遇到的冲突问题,介绍一些常见的解决方案。 冲突问题的产生原因 Git工具中的冲突问题通常是由于两个或多个开发人员同时修改了同一份代码文件造成的。当多个人对同一文件进行修改并上传到版本控制服务…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部