首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将txt文件读入链表,但打印仅打印链表中的第一个节点

在将文本文件读入链表并打印链表内容时,如果只打印了链表中的第一个节点,可能是因为链表的构建或遍历过程中出现了问题。以下是一个完整的示例,展示如何将文本文件读入链表并正确打印链表中的所有节点。

示例:将文本文件读入链表并打印

假设我们有一个文本文件 example.txt,内容如下:

代码语言:javascript
复制
line 1
line 2
line 3

我们将使用 JavaScript 来实现这个功能。首先,我们需要定义一个链表节点类和一个链表类,然后编写代码将文件内容读入链表并打印链表。

1. 定义链表节点类和链表类

代码语言:javascript
复制
class ListNode {
  constructor(data) {
    this.data = data;
    this.next = null;
  }
}

class LinkedList {
  constructor() {
    this.head = null;
  }

  append(data) {
    const newNode = new ListNode(data);
    if (this.head === null) {
      this.head = newNode;
    } else {
      let current = this.head;
      while (current.next !== null) {
        current = current.next;
      }
      current.next = newNode;
    }
  }

  printList() {
    let current = this.head;
    while (current !== null) {
      console.log(current.data);
      current = current.next;
    }
  }
}

2. 读取文件并将内容添加到链表

我们将使用 Node.js 的 fs 模块来读取文件内容。

代码语言:javascript
复制
const fs = require('fs');
const readline = require('readline');

const linkedList = new LinkedList();

const rl = readline.createInterface({
  input: fs.createReadStream('example.txt'),
  output: process.stdout,
  terminal: false
});

rl.on('line', (line) => {
  linkedList.append(line);
});

rl.on('close', () => {
  console.log('Contents of the linked list:');
  linkedList.printList();
});

解释

  1. 定义链表节点类和链表类
    • ListNode 类表示链表的一个节点,包含数据和指向下一个节点的指针。
    • LinkedList 类表示链表,包含头节点和一些操作链表的方法,如 appendprintList
  2. 读取文件并将内容添加到链表
    • 使用 Node.js 的 fs 模块和 readline 模块来逐行读取文件内容。
    • 每读取一行,就将该行内容添加到链表中。
    • 当文件读取完毕时,调用 printList 方法打印链表中的所有节点。

运行代码

确保你已经安装了 Node.js,然后在命令行中运行以下命令:

代码语言:javascript
复制
node your_script_name.js

这将读取 example.txt 文件的内容,并将每一行添加到链表中,最后打印链表中的所有节点。

常见问题排查

  1. 链表构建问题:确保在 append 方法中正确地将新节点添加到链表的末尾。
  2. 文件读取问题:确保文件路径正确,并且文件内容能够被逐行读取。
  3. 链表遍历问题:确保在 printList 方法中正确地遍历链表,打印每个节点的数据。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

打印两个链表第一个公共节点

「力扣上剑指offer52,打印两个链表第一个公共节点。」 ? 举个栗子 很多问题都有多种算法可以解决。...暴力解题 最最最简单就是暴力解题,你说两个链表第一个公共节点,那好,我就挨个遍历就完事了。 对于A链表每个节点,都遍历B链表,如果有相同节点,则返回该节点。...两个链表节点全都入栈,判断两个栈顶元素,如果相同则出栈;如果不同则返回刚出栈元素。...这里我们可以先做一个互补操作,使两个链表长度相等,实际上我们不需要生成如下链表,只需要遍历完一条链表后指向另一条链表表头即可。 ? 链表互补 链表互补之后,链表长度相等,双指针同时前进直接遍历。...我们遍历一条链表所有的节点值都设为true,然后遍历另一条链表,访问map对象,判断map是否存在该节点

83510
  • 使用线程安全型双向链表实现简单 LRU Cache 模拟

    ,并将其保存于本地 txt 文件当中。...主进程由于只负责资源分配调度,在资源分配给子线程后便会结束程序,同时子线程也将被关闭,这是我们不希望得到。 ​...在插入时,需同时修改链表最后一个节点后继与链表末尾指针。如果添加是该链表第一个元素,还应同时修改链表头部指针指向该节点。插入后,该节点前驱指针指向原本链表末尾节点。...Get():传入一个索引,返回其节点实例。 Search():传入一个数据值,返回第一个与数据值相等节点实例。 Display():链表打印在屏幕上。...它会先创建一个空链表,之后遍历被克隆链表节点,并创建一个一模一样节点到新链表。同时还支持接受一个开始与结束参数,能对链表进行切片。

    78410

    课设:通讯录

    链表初始化:(1)采用带头链表存储数据 (2)SLinit函数声明 先打开文件data.txt 再从文件读取数据存储至链表直至文件数据全部读取完毕 5.用户操作 (1)“添加联系人” Slpushback...prevtail->next = tail->next; 删除联系人节点 (3)“查找联系人” Slfind函数声明 设置tail变量,遍历链表直至找到节点打印节点内容 (4)“修改联系人” 设置...tail变量,遍历链表直至找到节点并改变除名字其他信息 (5)“显示全部联系人” 设置tail变量,遍历链表同时打印每一节点内容。...(6)“按姓名排序联系人” Slsort函数声明 //本质是冒泡排序 1.先设定min[10],运用strcpy函数第一节点姓名复制到min上,再遍历链表,运用strcmp函数比较min与当前节点...四、总结 主要问题出现在文件读写和slsort函数声明上, (1) 在函数读入上学会了fscanf函数使用并了解其返回值为读取成功数据个数,若读取失败则返回-1,可用于while循环进行连续读取

    6410

    江哥带你玩转C语言 | 17-文件操作

    文件分类 文本文件 以 ASCII 码格式存放,一个字节存放一个字符。文本文件每一个字节存放一个 ASCII 码,代表一个字符。这便于对字符逐个处理,占用存储空间 较多,而且要花费时间转换。...windows 平台在读入’\r\n’时,体现为一个字符’\n’,linux 平台在读入’\n’时,体现为一个字符’\n’ linux 读 windows 换行,则会多读一个字符,windows 读...stdio.h 函数功能 从 fp 所指向文件,至多读 length-1 个字符,送入字符数组 str , 如果在读入 length-1 个字符结束前遇\n 或 EOF,读入即结束,字符串读入后在最后加一个...->next; // 3.所有有效节点保存到文件 while(cur !...= NULL){ // 2.1取出当前节点数据, 打印 printf("name = %s\n", cur->name); printf("age =

    1K00

    【数据结构】单链表(一)

    * next;//下一个数据地址 }; 和上一篇一样,创建一个头文件,两个源文件 也是一样,在头文件SList.h定义单链表结构,并对类型和结构体改名 #include #include...) //打印 { SLNode* pcur = ps;//pcur指向当前链表第一个节点 } 要打印当然就要循环遍历,写一个while循环,判断条件为pcur,不为NULL进入循环 void SLPrint...(SLNode* ps) //打印 { SLNode* pcur = ps;//pcur指向当前链表第一个节点 while (pcur) //判断第一个节点是否为NULL { //....... } } 进入循环后打印内容 void SLPrint(SLNode* ps) //打印 { SLNode* pcur = ps;//pcur指向当前链表第一个节点 while (pcur...测试 测试时我们不直接传链表第一个节点node1,而是再定义一个结构体指针plist去指向node1,让plist作为参数传过去 SLNode* plist = node1; SLPrint

    8110

    一道打印链表题我写了几种方法

    什么是链表 百度百科说: 链表是一种物理存储单元上非连续、非顺序存储结构,数据元素逻辑顺序是通过链表指针链接次序实现。...一般链表都是用来和数组进行区分,与数组不同是,它是用一组任意存储单元来存储线性表数据,存储单元不一定是连续,而且链表长度不是固定。...说完了什么是链表之后,阿粉就来说说这个面试题吧。 面试题:从尾到头打印链表 输入链表第一个节点,从尾到头反过来打印出每个节点值! 那么这个题目都有哪些实现思路呢?...头结点数据域可以存储数据标题、表长等信息,也可以不存储任何信息,其指针域存储第一个结点首地址)之后插入数据,其特点是读入数据顺序与线性表逻辑顺序正好相反。...尾插法:每次插入新结点放在链表尾部。 也就是说,可以使用头插法来实现,这样的话,读顺序正好和逻辑顺序相反,就又出现了一种实现链表倒序打印方法了呀。既然说,那就得好好实现一下。

    34020

    【旧文重发 | 07】IC基础知识

    编写一组UNIX/Linux命令,以查看该文件内容,进入每个目录并运行一个进程(例如script.pl)。假设文件(/usr/home/file.txt每一行包含一个目录路径。...Linux命令,该命令所有非空白行从文件(file1.txt)移至另一个文件(file2.txt) grep -v “^$” file1.txt > file2.txt [124] 编写一个UNIX...查找当前目录或其子目录是否包含名称包含特定单词“dummy”文件 查找当前目录或其子目录是否存在不区分大小写文件“file” 查找所有名称不是“file.txt”且存在于当前目录或其子目录文件...优先调用是局部变量,所以将为打印出20. [130] 下列代码,y值是多少?...节点“next”指针指向“pos-1”处节点所指向节点,并将节点中“pos-1”处“next”指针指向新节点。 在链表HEAD增大“size”变量(随着添加了新节点)。

    75810

    C语言开发简单学生成绩管理系统(附源码)

    2.打印学生信息:格式化展示系统学生信息。 3.保存学生信息:系统学生信息保存到本地文档。 4.读取学生信息:读取本地文档学生信息并显示。...七、读取学生信息 打开存储学生信息文本,单个单词读取,判断非分隔符或者空时则赋值给链表节点,读取完毕后,直接调用PrintStudent()函数进行打印结果。...char数组赋值给整数 在头文件中有两个函数,int atoi(char *p)和char *itoa(int p),分别将装有整数char数组转化为整数,和整数按位数分解依次存入...遍历链表,如果有符合信息学生则打印,反之则继续下一个节点,若系统无该学生信息,给予用户无结果提示。...、尾节点或者中间节点,不同节点操作不同,同时该删除作用于本次操作,需保存学生信息才能长久生效。

    1.2K20

    python数据结构之链表(linked

    目录 基础 知识 1.1 链表基本结构 1.2 节点类和链表节点定义 1.3 顺序打印和逆序打印 链表基本操作 2.1 计算链表长度 2.2 从前,后插入数据 2.3 查找与删除...head:head节点永远指向第一个节点 tail: tail永远指向最后一个节点 None:链表中最后一个节点指针域为None值 链表也分为单向链表和单向循环链表,双向链表和双向循环链表,如图为单向链表和单向循环链表...node2.next = node3 1.3 顺序打印和逆序打印 因为先前已经建立了关系,所以可以通过输入第一个节点,循环整个链表然后顺序打印整个链表。...,主要步骤如下: list拆分成两个部分,head:第一个元素,tail:其余元素 向后打印 打印第一个元素 def printBackward(lists): if lists == None...在链表基本操作,包括插入,删除等,但要注意是一下操作是针对非循环链表,从头节点开始操作,而且我们不能插入 None值到链表

    1.1K20

    【数据结构】单链表

    1、单链表实现逻辑 我们知道了链表在物理结构上不一定连续,但是它却能做到管理数据,这是因为我们下一个数据地址和第一个数据存到一起,第一个数据地址我们是很容易得到,当我们找到第一个数据时就能通过下一个数据地址来找到下一个数据...2.2数据打印和查找 我们经常需要将单链表数据打印出来,或者在单链表查找一个数据是否存在,为了方便,这两个步骤也封装成函数。...打印链表数据需要借助头指针来依次找到其他节点,结束打印条件就是最后一个节点内指针为NULL。...如果尾插之前这个单链表有若干个节点,则我们需要找到最末端节点申请到这个节点接到末端。...如果当前单链表有多个节点,则需要在尾删后节点内指针置NULL。

    6410

    从尾到头打印链表

    题目描述 从尾到头反过来打印出每个结点值。 解题思路 1. 使用递归 要逆序打印链表 1->2->3(3,2,1),可以先逆序打印链表 2->3(3,2),最后再打印第一个节点 1。...而链表 2->3 可以看成一个新链表,要逆序打印链表可以继续使用求解函数,也就是在求解函数调用自己,这就是递归函数。...使用头插法 头插法顾名思义是节点插入到头部:在遍历原始链表时,当前节点插入新链表头部,使其成为第一个节点。...不要将头结点与第一个节点混起来,第一个节点链表第一个真正存储值节点。...使用栈 栈具有后进先出特点,在遍历链表值按顺序放入栈,最后出栈顺序即为逆序。

    43520

    打印列表从尾部到头部

    大家好,又见面了,我是全栈君 题目描写叙述: 输入一个链表,从尾到头打印链表每一个节点值。 输入: 每一个输入文件包括一组測试例子。...每一组測试案例包括多行,每行一个大于0整数,代表一个链表节点。第一行是链表第一个节点值,依次类推。 当输入到-1时代表链表输入完成。-1本身不属于链表。...输出: 相应每一个測试案例,以从尾到头顺序输出链表每一个节点值。每一个值占一行。...例子输入: 12345-1 例子输出: 54321 解法一: 1.遍历链表,使用栈结构来存储链表元素。 2.链表出栈即从尾到头打印链表。...代码: /********************************************从尾到头打印链表by Rowandjj2014/7/18************************

    51410

    数据结构与算法(链表

    我可以接受失败,绝对不能接受未奋斗过自己。 前言 这是我学习数据结构第三份笔记,有关链表知识。后期我会继续数据结构知识笔记补全。...链表是线性表一种,所以它一定在逻辑结构上是线性。 3. 数据元素逻辑顺序是通过链表指针链接次序实现。 4. 链表实际上由一个个节点和头指针组成。 链表分类 1....由于我们用头指针来表示链表,所以我们在修改链表时候,传入是头指针地址。 4. 如果是单链表,那么头指针指向第一个节点;如果是双链表,那么头指针指向头节点。 头节点 1....头节点在数据结构,特别是在链表,有着特殊作用。它主要目的是简化链表操作边界条件处理。 2. 因为头节点存在,所以不需要单独处理空链表或者在第一个元素上插入、删除情况。 3....{ *pphead = newnode; } else//如果链表里面有节点 { newnode->next = *pphead;//把新节点指针指向原来链表第一个节点

    5400

    数据结构——单链表详解(超详细)(1)

    ; struct Slist* next; //存放下一个节点地址 }SLTNode;   此外,对于单链表代码书写,小编同样是分成了三个文件,与顺序表一样,这三个文件分别是头文件(用于单链表创建...2.1.单链表打印 虽然我们还没有开始放置数据,但我们一定要先学会单链表打印,这个与我们正常打印是不同! ...,我们想要打印每一个结点数据,肯定要先知道它节点,之后我们可以通过它头结点来开始对下一个节点进行遍历直到遇到NULL,这样我们便可以停止打印,所以不难想到,这里我们用到了循环知识,通过每一次循环来打印数据...2.2.单链表尾插   我们在简述完打印后,肯定要讲述单链表增删查改了,我们先从单链表尾插说起,对于单链表尾插,这其实和顺序表尾插有点类似的,不过在顺序表,在顺序表,我们是扩容操作,而在单链表...第二种情况是头节点是存在,这时候需要我们节点下一个结点指向为原来节点,再将头节点更改为新节点就好了。

    11510

    链表介绍

    链表概念 1.1 链表 链表也是线性表一种。 链表是一种物理存储结构上非连续、非顺序存储结构,数据元素逻辑顺序是通过链表指针链接次序实现 。...为什么还需要指针变量来保存下一个节点位置? 链表每个节点都是独立申请(即需要插入数据时才去申请一块节点空间),我们需要通过指针变量来保存下一个节点位置才能从当前节点找到下一个节点。...链表实现 2.1 链表打印 2.1.1 构造一个链表 在test.c文件 先要用malloc向操作系统申请一块空间,然后让第一个节点数据等于1....2.当链表不为空时,申请新节点,原链表节点next指针指向新节点地址。 2.2.2 尾插函数代码 通过指针pcur = pcur->next,跳往下一个节点。...打印链表方法里有判断节点地址是否为空 ptail = NULL; } } 2.5 链表头删 2.5.1 分析 首先使用临时节点指针指向头节点,然后节点指向新头,最后把临时指针指向节点释放掉

    14310

    反转链表和哨兵位

    return 0; } 在这个例子,数组第一个元素被设置为-1,用作哨兵值。...) 在C语言中,链表逆序同样可以不使用哨兵位头节点使用哨兵位头节点可以简化某些边界情况处理。...reverseList函数用来逆序链表,它使用了一个哨兵头节点,即第一个节点作为prev指针初始位置,最后节点更新为prev指针所指向节点。printList函数用来打印链表节点值。...在main函数,我们创建了一个简单链表,并调用reverseList函数进行逆序,然后打印出逆序后结果。最后,我们释放了链表占用内存。...在main函数,我们创建了一个链表,并调用reverseList函数进行逆序,然后打印出逆序后结果。最后,我们释放了链表占用内存。

    5810

    单向链表增删改查排序操作

    链表则是另外一种储存数据格式,他可以让我们使用一个结构体,表示第一个数据和第二个数据之间关联关系,比如第一个数据在内存某个位置,同时这个数据另外一个成员表明了下一个数据在内存位置,这些位置可能是不相连...通过这个表明了下一个数据位置指针,我们就可以数据一和数据二连接起来,这样连接起来数据我们就称为链表了。 链表一般用来储存自定义一些相对较大数据,它可以在堆上自己分配管理数据所需内存。...我们上面谈到是单向链表链表也可以做成循环,也就是最后一个数据指向第一个数据位置,这样整个链表数据就练成一个环形状了。只要找到其中一个数据,就能找到整个链表所有数据。...除了单向链表、环形链表,还有双向链表,也就是一个链表节点不仅仅包含存储数据和下一个数据位置指针,还包含了上一个数据位置指针。...head = createList(); // 打印链表数据 displayList(head); // 在链表查找数据域为5节点 Node* pFind

    16520

    链表实现(文末附完整代码)

    ,是连续链表就好比是火车各节车厢,中间有东西将其互相连接 链表基本结构图如下: 有一个指针指向下一个节点 链表概念及结构 实际链表结构非常多样,以下情况组合起来就有8种链表结构...另外这个结构虽然结构复杂,但是后面的学习你会发现其实他是比较简单 链表实现 首先我们要了解就是单链表实现: 头文件如下: #include #include<assert.h...: 打印链表是我们可以用一个符号->来代替空格,但是链表实际上是没有这个符号 我们可以首先定义cur,从链表第一个节点开始遍历,知道cur为空时,就不会打印了,并且打印一次curdata,cur...: 头插比较简单,我们直接节点next等于链表第一个节点即可,也就是*pplist,我们传进来是**pplist,是节点地址地址,所以我们需要解引用一次才能将地址给newnodenext...: 头删就很简单了,首先定义一个tail存入第一个节点位置,然后第一个节点位置移动到他next,注意记得临时存储第一个节点位置指针给free掉,避免出现野指针问题 void SListPopFront

    10810
    领券