在 C++ 中以相反的顺序打印我的链接列表

2023-11-22

所以我对 C++ 相当陌生,今天我决定坐下来了解链表是如何工作的。到目前为止,我玩得很开心,但是当我尝试以相反的顺序打印链接列表时遇到了问题(而不是颠倒链接列表的顺序!)

另外,我想在没有双链表的情况下执行此操作:

#include <iostream>
#include <string>

using namespace std;

class LinkedList
{
    public:
        LinkedList()
        {
            head = NULL;
        }

        void addItem(string x)
        {
            if(head == NULL)
            {
                head = new node();
                head->next = NULL;
                head->data = x;
            } else {
                node* temp = head;
                while(temp->next != NULL)
                    temp = temp->next;

                node* newNode = new node();
                newNode->data = x;
                newNode->next = NULL;
                temp->next = newNode;
            }
        }
        void printList()
        {
            node *temp = head;
            while(temp->next != NULL)
            {
                cout << temp->data << endl;
                temp = temp->next;
            }
            cout << temp->data << endl;
        }

        void addToHead(string x)
        {
            node *temp = head;
            head = new node;
            head->next = temp;
            head->data = x;
        }

        int countItems()
        {
            int count = 1;
            for(node* temp = head; temp->next != NULL; temp = temp->next)
                ++count;
            return count;
        }

        void printReverse()
        {
            node* temp2;
            node* temp = head;
            while(temp->next != NULL)
                temp = temp->next;

            //Print last node before we enter loop
            cout << temp->data << endl;

            for(double count = countItems() / 2; count != 0; --count)
            {
                //Set temp2 before temp
                temp2 = head;
                while(temp2->next != temp)
                    temp2 = temp2->next;
                cout << temp2->data << endl;

                //Set temp before temp2
                temp = head;
                while(temp->next != temp2)
                    temp = temp->next;
                cout << temp->data << endl;
            }
            cout << "EXIT LOOP" << endl;
        }

    private:
        struct node
        {
            string data;
            node *next;
        }

    *head;
};

int main()
{
    LinkedList names;

    names.addItem("This");
    names.addItem("is");
    names.addItem("a");
    names.addItem("test");
    names.addItem("sentence");
    names.addItem("for");
    names.addItem("the");
    names.addItem("linked");
    names.addItem("list");

    names.printList();

    cout << endl;

    names.addToHead("insert");

    names.printList();

    cout << endl;

    cout << names.countItems() << endl;

    cout << "Print reverse: " << endl;
    names.printReverse();
    cout << endl;

    return 0;
}

现在我不确定我的代码崩溃的确切原因,非常感谢任何帮助!

Thanks!


Within printList,你还必须检查head == NULL,否则您正在访问指向的指针的成员NULL。以下应该有效。

    void printList()
    {
        node *temp = head;
        while(temp != NULL) // don't access ->next
        {
            cout << temp->data << endl;
            temp = temp->next;
        }
    }

In printReverse()我实在不明白为什么每次迭代都要打印一半的元素计数并打印两个元素。但是,这里确实不需要 for 循环。您可以立即停止temp == head在你的循环之后,从那时起你就打印了头部。并且仅打印一个元素,该元素的下一个指针指向先前打印的元素。

解决该问题的另一种递归尝试如下所示:

    void printReverse()
    {
        printReverseRecursive(head);
    }
    void printReverseRecursive(node *n)
    {
        if(n) {
            printReverseRecursive(n->next);
            cout << n->data << endl;
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中以相反的顺序打印我的链接列表 的相关文章

  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • 在 CPP 类中将 C 函数声明为友元

    我需要在 C 函数中使用类的私有变量 我正在做这样的事情 class Helper private std string name public std getName return name friend extern C void in
  • Grpc - 将消息从一个客户端发送到连接到同一服务器的另一个客户端

    是否可以将消息从一个客户端发送到连接到同一服务器的另一个客户端 我想将数据从一个客户端发送到服务器然后发送到特定客户端 我想我需要获取客户端 ID 但我不知道如何获取此 ID 以及如何从服务器将此消息发送到该客户端 我这里有一个样本 这是一
  • 未找到 Boost 库,但编译正常

    我正在尝试在 C 中使用 boost 的文件系统 使用时看起来编译没问题 c c Analyse c o Analyse o g W Wall L usr local lib lboost filesystem lboost system
  • java中如何重新初始化int数组

    class PassingRefByVal static void Change int pArray pArray 0 888 This change affects the original element pArray new int
  • 如何将 .txt 文件中的数据转换为 xml? C#

    我在一个文本文件中有数千行数据 我想通过将其转换为更容易搜索的内容来轻松搜索 我希望 XML 或其他类型的大型数据结构 尽管我不确定它是否是最好的对于我的想法 每行的数据如下所示 第 31 册 托马斯 乔治 32 34 154 每本书都不是
  • Eigen 和 OpenMP:由于错误共享和线程开销而没有并行化

    系统规格 Intel Xeon E7 v3 处理器 4 插槽 16 核 插槽 2 线程 核心 Eigen 系列和 C 的使用 以下是代码片段的串行实现 Eigen VectorXd get Row const int j const int
  • 如何使用 ASP.NET Core 获取其他用户的声明

    我仍在学习 ASP NET Core 的身份 我正在进行基于声明的令牌授权 大多数示例都是关于 当前 登录用户的 就我而言 我的 RPC 服务正在接收身份数据库中某个用户的用户名和密码 我需要 验证是否存在具有此类凭据的用户 获取该用户的所
  • C++中判断unicode字符是全角还是半角

    我正在编写一个终端 控制台 应用程序 该应用程序应该包装任意 unicode 文本 终端通常使用等宽 固定宽度 字体 因此要换行文本 只需计算字符数并观察单词是否适合一行并采取相应的操作 问题是 Unicode 表中的全角字符在终端中占用了
  • 在 C# 中检查 PowerShell 执行策略的最佳方法是什么?

    当你跑步时Get ExecutionPolicy在 PowerShell 中 它得到有效的执行政策 https learn microsoft com en us powershell module microsoft powershell
  • 不可变类与结构

    以下是类与 C 中的结构的唯一区别 如果我错了 请纠正我 类变量是引用 而结构变量是值 因此在赋值和参数传递中复制结构的整个值 类变量是存储在堆栈上的指针 指向堆上的内存 而结构变量作为值存储在堆上 假设我有一个不可变的结构 该结构的字段一
  • C++ - 多维数组

    处理多维数组时 是否可以为数组分配两种不同的变量类型 例如你有数组int example i j 有可能吗i and j是两种完全不同的变量类型 例如 int 和 string 听起来您正在寻找 std vector
  • 将二变量 std::function 转换为单变量 std::function

    我有一个函数 它获取两个值 x 和 y 并返回结果 std function lt double double double gt mult double x double y return x y 现在我想得到一个常量 y 的单变量函数
  • 如何在 C# 中创建异步方法?

    我读过的每一篇博客文章都会告诉您如何在 C 中使用异步方法 但由于某些奇怪的原因 从未解释如何构建您自己的异步方法来使用 所以我现在有这段代码使用我的方法 private async void button1 Click object se
  • 模板类的模板构造函数的 C++ 显式模板特化

    我有一个像这样的课程 template
  • 模板类中的无效数据类型生成编译时错误?

    我正在使用 C 创建一个字符串类 我希望该类仅接受数据类型 char 和 wchar t 并且我希望编译器在编译时使用 error 捕获任何无效数据类型 我不喜欢使用assert 我怎样才能做到这一点 您可以使用静态断言 促进提供一个 ht
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh

随机推荐

  • Android开发中MonoDroid VS Java?

    我非常了解 C 并且喜欢将 Visual Studio 作为 IDE 但现在我想开始为 android 开发 我发现关于单一机器人并想问一下它是否有任何缺点可以使 Java 更受欢迎 或者我应该卸载 Eclipse 并直接进入 MonoDr
  • Firebase错误:请求的数据超出了单个请求可以访问的最大大小

    我需要export my Firabase数据库为JSON通过 Firebase 控制台 但是当我这样做时 我在 JSON 文件中收到以下消息 请求的数据超出了可以访问的最大大小 单一请求 我怎样才能解决这个问题 额外细节 这是我在控制台中
  • 无法连接到 Google 云连接服务器

    我尝试在我的服务器和 Google Cloud 连接服务器 CCS 之间打开 XMPP 连接 但它不起作用 我正在使用 PHP 进行编程并使用 JAXL 库 这是我的代码
  • 异常处理——显示发生错误的行号? [复制]

    这个问题在这里已经有答案了 可能的重复 在异常处理中显示行号 有人可以告诉我如何获取发生错误的代码的行号并将其显示到控制台吗 其他信息 例如文件名或方法名称 将非常方便 如果您需要文件和行号 则无需解析 StackTrace 字符串 您可以
  • Adobe Flash Builder (flex4):addChild() 在此类中不可用。

    我想将 swf 加载到 flex 4 应用程序中以便使用它的类 var ldr Loader new Loader ldr load new URLRequest file path to fileswf ldr contentLoader
  • 如何使用 swiftlint 来检查单个文件?

    我想使用 swiftlint 来检查单个文件 我该如何实现这个目标 检查文档https github com realm SwiftLint没有帮助 您还可以通过以下方式执行此操作 swiftlint path path to your f
  • 垂直和水平对齐 checkBoxGroupInput

    在类似的帖子中 如何在 R Shiny 中对齐一组 checkboxGroupInput 复选框仅垂直对齐 如我的示例 或仅水平对齐 R 水平闪亮显示 checkboxGroupInput 我想知道是否有一种方法可以在两种意义上实现这一点
  • 闪亮的 R 对齐按钮

    我的 U i 文件中有两个按钮 div style display inline block submitButton Analysis div style display inline block downloadButton downl
  • matlab 是否有像 python 中那样的列表理解之类的东西?

    我正在寻找类似 matlab 中的列表推导式的东西 但是我在纪录片中找不到类似的东西 在Python中它会是这样的 A i 50 for i in range 50 Matlab 非常喜欢 矢量化 您可以将示例写为 A 0 49 50 Ma
  • 使用tensorflow的数据集管道,如何*命名*“map”操作的结果?

    我有下面的地图函数 可运行的示例 它输入一个string并输出一个string and an integer in tf data Dataset from tensor slices我将原始输入命名为 filenames 但是当我从地图函
  • 宏作为另一个宏的参数

    我正在尝试将参数传递给宏SETBIT与另一个像这样的预定义宏 define SETBIT ADDRESS BIT N N ADDRESS 1 lt
  • 如何将 React 与 p5.js 结合使用

    我真的很喜欢p5 js和react js 所以我想知道如何将这两个结合在一起 但我无法做到这一点 所以我需要你的帮助 我真的无法为您提供一些代码示例 因为我不知道如何开始 所以我想做的是 1 创建反应应用程序 2 使用p5 js渲染画布 我
  • 格式化/缩进我的 HTML 代码的 PHP 函数/类? [复制]

    这个问题在这里已经有答案了 是否有 PHP 函数 类可以清理我的 HTML 代码 例如 html ul li item1 li li item2 li echo htmlClean html Outputs ul li item1 li l
  • MySQL 5.5 分区表(按 A-Z)

    据我了解 从 MySQL 5 5 开始 您现在可以按非整数值 例如 varchar 对表进行分区 我有一个表 在其中对单个 varchar 列执行大量查找 因此出于性能原因我想对其进行分区 在所有情况下 列的值都是单个字母单词 严格小写 a
  • 在一个线程上创建的 C# 控件不能成为另一线程上控件的父级

    我正在运行一个线程 该线程获取信息并创建标签并显示它 这是我的代码 private void RUN Label l new Label l Location new Point 12 10 l Text Some Text this Co
  • 证书的 Azure Function Key Vault 参考?

    我正在尝试按照所述在我的 Azure Function v1 中使用 Key Vault 引用here 它适用于秘密 但不适用于证书 这些文档根本没有提到证书 所以也许它们根本不受支持 我希望将其作为 Base64 字符串获取 我正在使用的
  • 比较 groovy 中的 null 和 number

    为什么 Groovy 中以下情况成立 0 gt null 是选择的结果还是compareTo 实现的结果 我正在使用 Groovy 2 0 5 在 Groovy 中null是最低可能的元素 所以一切都是 gt null assert tim
  • 使用 Cocoa-Touch 播放文档目录中下载的视频

    我试图让我的应用程序播放已下载到文档目录的视频文件 我知道该文件正在下载 但我似乎无法播放该文件 这是我的代码 IBAction play NSArray paths NSSearchPathForDirectoriesInDomains
  • 将多个字符串替换为多个其他字符串

    我正在尝试用多个其他单词替换字符串中的多个单词 该字符串是 我有一只猫 一只狗和一只山羊 然而 这不会产生 我有一只狗 一只山羊和一只猫 而是产生 我有一只猫 一只猫和一只猫 在JavaScript中是否可以同时用多个其他字符串替换多个字符
  • 在 C++ 中以相反的顺序打印我的链接列表

    所以我对 C 相当陌生 今天我决定坐下来了解链表是如何工作的 到目前为止 我玩得很开心 但是当我尝试以相反的顺序打印链接列表时遇到了问题 而不是颠倒链接列表的顺序 另外 我想在没有双链表的情况下执行此操作 include