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日

相关文章

  • PHP面向对象程序设计中的self、static、parent关键字用法分析

    PHP面向对象程序设计中的self、static、parent关键字用法分析 1. self关键字 self关键字在类内部使用,指代当前类自身。 使用self可以访问类的常量、静态属性和静态方法。 示例1:访问类的常量 class MyClass { const MY_CONSTANT = 10; public function getConstant() …

    other 2023年6月28日
    00
  • Android中通过外部程序启动App的三种方法

    当在Android中通过外部程序启动App时,有三种常用的方法: 使用隐式Intent启动App:通过指定App的包名和启动Activity的Action,可以使用隐式Intent启动App。以下是示例代码: Intent intent = new Intent(); intent.setAction(Intent.ACTION_MAIN); intent.…

    other 2023年9月7日
    00
  • 封装属于自己的JS组件

    封装属于自己的JS组件是一件非常重要的工作,它可以帮助我们在后续的开发中实现更高效、更优雅的代码,并且可以大大提高代码重用率。下面是一些完整的攻略来帮助您开始封装自己的JS组件: 定义组件的自描述信息 在设计组件之前,首先需要定义组件的自描述信息。这些信息包括组件的用途、功能、实现算法、接口、参数等。这些信息可以写在组件的注释部分中,以帮助其他开发者更好地理…

    other 2023年6月25日
    00
  • 怎样去除或恢复NVIDIA等显卡的右键菜单

    要去除或恢复NVIDIA等显卡的右键菜单,可以按照以下步骤操作: 去除显卡右键菜单 打开“注册表编辑器”,方法是按下Win+R组合键,在弹出的运行对话框中输入“regedit”并回车。 找到以下路径:HKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers,在该键值下,可以看到一些子…

    other 2023年6月27日
    00
  • jquery动画详解

    jQuery动画详解 jQuery是一个颇为受欢迎的JavaScript库,其主要目的是让JavaScript变得更加易于使用。其中一个最棒的特性就是其强大的动画效果。 jQuery提供了一组用于创建动画的方法,通过这些方法,我们可以完全控制想要实现的动画效果,其实现方式非常简单和直观。本篇文章将详细介绍jQuery动画效果的实现方式和用法,旨在帮助读者更快…

    其他 2023年3月28日
    00
  • 易语言实现自动发送QQ信息的代码

    易语言实现自动发送QQ信息的代码攻略 1. 准备工作 在开始编写代码之前,需要确保已经安装了易语言开发环境,并且已经登录了QQ账号。 2. 创建新项目 打开易语言开发环境,点击\”新建\”按钮创建一个新项目。 3. 添加控件 在项目中添加一个按钮控件和一个编辑框控件,用于输入要发送的QQ号码和消息内容。 4. 编写代码 在按钮的点击事件中编写代码,实现自动发…

    other 2023年7月29日
    00
  • 移动端专用的meta标签设置大全

    关于移动端专用的meta标签设置大全,我们需要掌握以下几个关键点: viewport设置 页面编码设置 苹果设备图标设置 禁止缩放 禁止识别电话号码 禁止识别邮箱地址 网站描述 关键词设置 下面我们逐步展开: 1. viewport设置 在移动端网页中,需要设置viewport标签,以便正确显示页面内容。viewport标签可以指定视口的大小,以及默认缩放比…

    other 2023年6月27日
    00
  • windows10redis部署

    Windows 10下Redis的部署 Redis是一个高性能的键值对数据库,常用于缓存、消息队列等场景。在Windows 10操作系统下,Redis的部署相对于其他操作系统可能需要更多的配置和调整。本文将介绍如何在Windows 10下部署Redis。 1. 安装Redis 首先,需要到Redis官网下载最新的Windows版本,下载地址为 https:/…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部