You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何向已序列化的链表添加元素并重新序列化

链表序列化后修改再重新序列化的实现方案

你要完成新增元素后再序列化的核心是把JSON反序列化得到的普通对象,还原为SinglyLinkedList类的实例——因为JSON序列化只会保留对象的属性状态,不会保留类的原型方法(比如你用到的push),所以反序列化后直接操作普通对象是调用不到链表方法的,还原为实例后就可以正常操作。

具体实现步骤如下:

  • 第一步:给你的单链表类补充静态重建方法
    给SinglyLinkedList加一个fromJSON静态方法,用来把序列化后的普通对象转换为合法的链表实例,示例实现如下:
class SinglyLinkedList {
  // 你原来的链表构造、push、print等原有方法保持不变
  constructor() {
    this.head = null
    this.length = 0
  }
  push(val) { /* 原有实现保持不变 */ }
  print() { /* 原有实现保持不变 */ }

  // 新增静态方法,从序列化后的JSON对象重建链表
  static fromJSON(serializedObj) {
    const list = new SinglyLinkedList()
    // 遍历序列化后的节点链,依次push到新链表实例
    let currentNode = serializedObj.head
    while (currentNode) {
      list.push(currentNode.value) // 如果你的节点属性名是val,替换为currentNode.val即可
      currentNode = currentNode.next
    }
    return list
  }
}
  • 第二步:读取文件→重建实例→修改→重新序列化存储
const fs = require('fs')

// 读取文件并更新链表
fs.readFile('./test.txt', 'utf-8', (err, data) => {
  if (err) {
    console.log(err)
    return
  }
  // 反序列化为普通对象
  const serializedList = JSON.parse(data)
  // 还原为SinglyLinkedList实例
  const list = SinglyLinkedList.fromJSON(serializedList)
  
  // 正常调用链表方法新增元素
  list.push('你要新增的内容')
  // 可调用print验证修改结果
  list.print()

  // 重新序列化后写入文件
  fs.writeFile('./test.txt', JSON.stringify(list), err => {
    if (err) console.log(err)
  })
})

不推荐直接修改反序列化对象的原型指向SinglyLinkedList.prototype,这种方式虽然也能调用到方法,但如果序列化后的对象属性和类实例属性有差异时很容易出现隐式bug,通过静态方法重建实例兼容性和稳定性更好。

内容的提问来源于stack exchange,提问作者RHGPT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:15:04