[leetcode]链表基础回顾

news2025/1/16 15:18:26

一.创建带头节点的链表

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }

    printLinkList(head);

    return 0;
}

二.遍历单链表

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }

    printLinkList(head);

    return 0;
}

三.添加新节点

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

void push_back(LinkList& head, char ch)
{
    LinkList newNode = new Node;
    newNode->next = NULL;
    newNode->ch = ch;
    LinkList p = head;
    while (p->next != nullptr)
    {
        p = p->next;
    }
    p->next = newNode;

}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }
    push_back(head, '5');
    printLinkList(head);

    return 0;
}

四.计算链表长度

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

void push_back(LinkList& head, char ch)
{
    LinkList newNode = new Node;
    newNode->next = NULL;
    newNode->ch = ch;
    LinkList p = head;
    while (p->next != nullptr)
    {
        p = p->next;
    }
    p->next = newNode;

}

int size(LinkList head)
{
    int len = 0;
    int size = 0;
    ListNode* p = head->next;
    while (p != NULL)
    {
        size++;
        p = p->next;
    }
    return len;
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }
    push_back(head, '5');
    printLinkList(head);

    return 0;
}

五.插入新节点

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

typedef struct Node {
    char ch;
    Node* next;
}*LinkList,ListNode;

void printLinkList(LinkList& head)
{
    LinkList p = head->next;
    while (p != NULL)
    {
        cout << p->ch << " ";
        p = p->next;
    }
}

void push_back(LinkList& head, char ch)
{
    LinkList newNode = new Node;
    newNode->next = NULL;
    newNode->ch = ch;
    LinkList p = head;
    while (p->next != nullptr)
    {
        p = p->next;
    }
    p->next = newNode;

}

int size(LinkList head)
{
    int len = 0;
    int size = 0;
    ListNode* p = head->next;
    while (p != NULL)
    {
        size++;
        p = p->next;
    }
    return len;
}


void insert(LinkList& head, int index,char ch)//index从head开始算为0到size
{
    int len = size(head);
    LinkList p = head->next;

    for (int i = 1; i < index - 1; i++)
    {
        p = p->next;
    }
    LinkList newNode = new Node;
    newNode->ch = ch;
    newNode->next = p->next;
    p->next = newNode;
}

int main() {
    Node* head = new Node;
    head->next = nullptr; 
    Node* p = head;
    Node* s = nullptr;
    char ch;

    cout << "Enter characters to build the list (use '#' to stop): ";
    while (cin >> ch && ch != '#') {
        s = new Node(); // 创建新节点,初始化 ch 和 next 为 nullptr
        s->ch = ch;
        s->next = nullptr;
        p->next = s;
        p = s;
    }
    push_back(head, '5');
    insert(head, 3,'3');
    printLinkList(head);
    
    return 0;
}
//1 2 4 #

六.删除节点

void deleteList(LinkList& head, int index) {
    if (head == nullptr || head->next == nullptr || index < 0) {
        // 如果链表为空或索引无效,不执行任何操作
        return;
    }

    LinkList p = head; // p 用于遍历链表,从头节点开始
    if (index == 0) {
        // 如果要删除的是头节点的下一个节点
        LinkList temp = head->next; // 保存要删除的节点
        head->next = temp->next;    // 更新头节点的 next 指针,跳过要删除的节点
        delete temp;               // 释放要删除节点的内存
        return;
    }

    // 找到要删除节点的前一个节点
    for (int i = 1; i < index; i++) {
        if (p->next == nullptr) {
            // 如果索引超出链表范围,不执行任何操作
            return;
        }
        p = p->next;
    }

    if (p->next == nullptr) {
        // 如果索引超出链表范围,不执行任何操作
        return;
    }

    LinkList temp = p->next; // 保存要删除的节点
    p->next = temp->next;  // 更新前一个节点的 next 指针,跳过要删除的节点
    delete temp;           // 释放要删除节点的内存
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2277591.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rclone,云存储备份和迁移的瑞士军刀,千字常文解析,附下载链接和安装操作步骤...

一、什么是rclone&#xff1f; rclone是一个命令行程序&#xff0c;全称&#xff1a;rsync for cloud storage。是用于将文件和目录同步到云存储提供商的工具。因其支持多种云存储服务的备份&#xff0c;如Google Drive、Amazon S3、Dropbox、Backblaze B2、One Drive、Swift、…

JAVA:利用 RabbitMQ 死信队列实现支付超时场景的技术指南

1、简述 在支付系统中&#xff0c;订单支付的超时自动撤销是一个非常常见的业务场景。通常用户未在规定时间内完成支付&#xff0c;系统会自动取消订单&#xff0c;释放相应的资源。本文将通过利用 RabbitMQ 的 死信队列&#xff08;Dead Letter Queue, DLQ&#xff09;来实现…

favor的本质

英文单词 favor&#xff0c;通常指一个的“喜好或偏爱”&#xff1a; favor n.赞成&#xff1b;喜爱&#xff0c;宠爱&#xff0c;好感&#xff0c;赞同&#xff1b;偏袒&#xff0c;偏爱&#xff1b;善行&#xff0c;恩惠 v.赞同&#xff1b;喜爱&#xff0c;偏爱&#xff1b…

[青基解读一] 2025年国家自然科学基金---指南解读

指南解读 1 需要2个高级专业技术职称推荐&#xff08;2个正教授&#xff09; 2 国自然、国社科只能申请一个 3 资助类别 亚类说明 附注说明 自由探索or目标导向 4 申请代码到二级 申请代码、研究方向、关键词 主要参与者不写学生仅写人数 主要参与者 在线采集、填写简历、生成…

Open FPV VTX开源之ardupilot配置

Open FPV VTX开源之ardupilot配置 1. 源由2. 配置3. 总结4. 参考资料5. 补充5.1 飞控固件版本5.2 配置Ardupilot的BF OSD5.3 OSD偏左问题 1. 源由 飞控嵌入式OSD - ardupilot配置使用ardupliot配套OSD图片。 Choose correct font depending on Flight Controller SW. ──>…

HarmonyOS应用开发者初级认证最新版– 2025/1/13号题库新版

1.欢迎各位读者&#xff0c;本文档来自鸿蒙开发学员亲测&#xff0c;最新版。&#xff08;考试时直接Ctrlf进行搜索&#xff0c;一定要认真比对答案&#xff0c;有的答案相似度很高&#xff09;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 欢迎…

视觉多模态大模型---MiniMax-vl-01---以闪电般的注意力缩放基础模型

简介 MiniMax-VL-01 是与今年1月15日由上海稀宇科技有限公司&#xff08;MiniMax&#xff09;发布并开源的一款视觉多模态大模型&#xff0c;它与基础语言大模型 MiniMax-Text-01 一同构成了 MiniMax-01 系列。这款模型的设计初衷是为了应对日益增长的长上下文处理需求&#x…

CF 230A.Dragons(Java实现)

题目分析 &#xff08;桐老爷&#xff0c;泪目&#xff09;题目讲很多字&#xff0c;其实就是打怪升级&#xff0c;初始战斗力>龙的战斗力就能击败龙并炼化经验增加战斗力&#xff0c;然后打下一条龙&#xff0c;如果打不过了就寄 思路分析 首先我还是想到键值对&#xff0…

【落羽的落羽 C语言篇】文件操作

文章目录 一、文件的概念和分类1. 概念和分类2. 文件名3. 数据文件 三、文件操作1. 文件的打开和关闭1.1 流1.2 文件指针1.3 文件的打开和关闭 2. 文件的顺序读写3. 文件的随机读写4. 文件读取的判定5. 文件缓冲区 一、文件的概念和分类 1. 概念和分类 文件是用来保存数据的。…

速通Docker === 介绍与安装

目录 Docker介绍 Docker优势 Docker组件 Docker CLI (命令行接口) Docker Host (Docker 守护进程) 容器 (Container) 镜像 (Image) 仓库 (Registry) 关系总结 应用程序部署方式 传统部署 (Traditional Deployment) 虚拟化部署 (Virtualization Deployment) 容器部署…

数据分析:非度量多维排列 NMDS (Non-metric multidimensional scaling)ANOSIM检验分析

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理步骤加载R包数据下载导入数据数据预处理计算距离矩阵ANOSIM检验非度量多维排列NMDS应力值(stress value)画图输出系统信息介绍 非度量多维排列(Non-metric Multidimensiona…

Flink (七): DataStream API (四) Watermarks

1. Event Time and Processing Time 1. 1 处理时间&#xff08;Processing time&#xff09; 处理时间是指执行相应操作的机器的系统时间。当流处理程序基于处理时间运行时&#xff0c;所有基于时间的操作&#xff08;如时间窗口&#xff09;将使用执行相应算子的机器的系统时…

OpenStack 网络服务的插件架构

OpenStack 的网络服务具有灵活的插件架构&#xff0c;可支持多种不同类型的插件以满足不同的网络需求。以下是对 OpenStack 网络服务插件架构中一些常见插件类型的介绍&#xff1a; 一、SDN 插件 Neutron 与 SDN 的集成&#xff1a;在 OpenStack 网络服务里&#xff0c;SDN 插…

光伏储能交直流微电网Matlab/Simulink仿真模型

博士毕业后项目和课题的交接工作也都基本上结束了&#xff0c;之前从20年我博一开始创作的博客&#xff0c;我也将从25年伊始重新进行更新&#xff0c;在保留原有内容的基础上&#xff0c;在对现如今的研究热点进行补充&#xff0c;希望能为各位校友提供一定的研究思路。首先是…

【js进阶】设计模式之单例模式的几种声明方式

单例模式&#xff0c;简言之就是一个类无论实例化多少次&#xff0c;最终都是同一个对象 原生js的几个辅助方式的实现 手写forEch,map,filter Array.prototype.MyForEach function (callback) {for (let i 0; i < this.length; i) {callback(this[i], i, this);} };con…

Broker收到消息之后如何存储

1.前言 此文章是在儒猿课程中的学习笔记&#xff0c;感兴趣的想看原来的课程可以去咨询儒猿课堂《从0开始带你成为RocketMQ高手》&#xff0c;我本人觉得这个作者还是不错&#xff0c;都是从场景来进行分析&#xff0c;感觉还是挺适合我这种小白的。这块主要都是我自己的学习笔…

vim使用指南

&#x1f3dd;️专栏&#xff1a;计算机操作系统 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 一、Vim 的基本概念 1.Vim 的主要模式&#xff1a; 1.1普通模式 (Normal Mode) 1.2插入…

计算机网络 网络层 2

IP协议&#xff1a; Ip数据报的格式&#xff1a; 首部:分为固定部分 和 可变部分 固定部分是20B 版本&#xff1a;表明了是IPV4还是IPV6 首部长度&#xff1a;单位是 4B&#xff0c;表示的范围是&#xff08;5~15&#xff09;*4B 填充&#xff1a;全0&#xff0c;,让首部变…

干净卸载Windows的Node.js环境的方法

本文介绍在Windows电脑中&#xff0c;彻底删除Node.js环境的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/144810076&#xff09;中&#xff0c;我们介绍过在Windows电脑中&#xff0…

《汽车维护与修理》是什么级别的期刊?是正规期刊吗?能评职称吗?

​问题解答&#xff1a; 问&#xff1a;《汽车维护与修理》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知网收录的正规学术期刊。 问&#xff1a;《汽车维护与修理》级别&#xff1f; 答&#xff1a;国家级。主管单位&#xff1a;中国汽车维修行业协会 …