{"version":3,"sources":["jsdelivr-header.js","/npm/linked-list-node@1.0.1/index.js"],"names":[],"mappings":"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","file":"/npm/linked-list-node@1.0.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/linked-list-node@1.0.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/**\r\n * 创建节点\r\n * @param {*} val 列表节点值\r\n */\r\nfunction createNode(val) {\r\n  this.val = val;\r\n  this.next = null;\r\n  this.previous = null;\r\n}\r\n\r\n/**\r\n * 遍历节点\r\n * @param {*} node\r\n * @param {*} callback\r\n */\r\nfunction map(node, callback) {\r\n  var currentNode = node;\r\n  while (currentNode) {\r\n    callback && callback(currentNode);\r\n    currentNode = currentNode.next;\r\n  }\r\n}\r\n\r\n/**\r\n * 获取链表长度\r\n * @param {*} node\r\n * @returns\r\n */\r\nfunction length(node) {\r\n  var len = 0;\r\n  var currentNode = node;\r\n  while (currentNode) {\r\n    len++;\r\n    currentNode = currentNode.next;\r\n  }\r\n  return len;\r\n}\r\n\r\n/**\r\n * 查找节点\r\n * @param {*} parameter 查找的对比参数可以是函数\r\n * @param {*} node 链表的节点\r\n * @param {*} isDown true为向下查找，false为向上查找\r\n * @returns\r\n */\r\nfunction find(node, parameter, isDown = true) {\r\n  var currentNode = node;\r\n  while (currentNode) {\r\n    if (typeof parameter === 'function') {\r\n      if (parameter(currentNode)) {\r\n        return currentNode;\r\n      }\r\n    } else if (currentNode.val === parameter) {\r\n      return currentNode;\r\n    }\r\n    currentNode = currentNode[isDown ? 'next' : 'previous'];\r\n  }\r\n  return 'not find';\r\n}\r\n\r\n/**\r\n * 获取链表最后一个节点\r\n * @param {*} node\r\n * @returns\r\n */\r\nfunction last(node) {\r\n  var currentNode = node;\r\n  while (currentNode) {\r\n    if (currentNode.next) {\r\n      currentNode = currentNode.next;\r\n    } else {\r\n      return currentNode;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * 获取链表第一个节点\r\n * @param {*} node\r\n * @returns\r\n */\r\nfunction first(node) {\r\n  var currentNode = node;\r\n  while (currentNode) {\r\n    if (currentNode.previous) {\r\n      currentNode = currentNode.previous;\r\n    } else {\r\n      return currentNode;\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * 向后追加节点\r\n * @param {*} node\r\n * @param {*} newVal\r\n */\r\nfunction push(node, newVal) {\r\n  var el = last(node);\r\n  var newNode = new createNode(newVal);\r\n  newNode.previous = el;\r\n  el.next = newNode;\r\n}\r\n\r\n/**\r\n * 向前追加节点\r\n * @param {*} node\r\n * @param {*} newVal\r\n */\r\nfunction unshift(node, newVal) {\r\n  var el = first(node);\r\n  var newNode = new createNode(newVal);\r\n  el.previous = newNode;\r\n  newNode.next = el;\r\n}\r\n\r\n/**\r\n * 插入节点\r\n * @param {*} node\r\n * @param {*} parameter\r\n * @param {*} newVal\r\n */\r\nfunction insert(node, parameter, newVal) {\r\n  var el = find(node, parameter);\r\n  if (el !== 'not find') {\r\n    var newNode = new createNode(newVal);\r\n    newNode.next = el.next;\r\n    newNode.next.previous = newNode;\r\n    newNode.previous = el;\r\n    el.next = newNode;\r\n  }\r\n}\r\n\r\n/**\r\n * 删除节点\r\n * @param {*} node\r\n * @param {*} parameter\r\n */\r\nfunction del(node, parameter) {\r\n  var el = find(node, parameter);\r\n  if (el !== 'not find') {\r\n    el.previous.next = el.next;\r\n    el.next.previous = el.previous;\r\n  }\r\n}\r\n\r\n/**\r\n * 修改节点内容\r\n * @param {*} node\r\n * @param {*} parameter\r\n * @param {*} newVal\r\n */\r\nfunction setVal(node, parameter, newVal) {\r\n  var el = find(node, parameter);\r\n  if (el !== 'not find') {\r\n    el.val = newVal;\r\n  }\r\n}\r\n\r\n/**\r\n * 交换节点\r\n * @param {*} node\r\n * @param {*} parameter1\r\n * @param {*} parameter2\r\n */\r\nfunction exchange(node, parameter1, parameter2) {\r\n  var el1 = find(node, parameter1);\r\n  var el2 = find(node, parameter2);\r\n  if (el1 !== 'not find' && el2 !== 'not find') {\r\n    var val1 = el1.val;\r\n    el1.val = el2.val;\r\n    el2.val = val1;\r\n  }\r\n}\r\n\r\n/**\r\n * 链表排序\r\n * @param {*} node\r\n * @param {*} callback\r\n */\r\nfunction sort(node, callback) {\r\n  let len = length(node) - 1;\r\n  while (len > 0) {\r\n    let currentNode = first(node);\r\n    let i = 0;\r\n    while (currentNode && i < len) {\r\n      i++;\r\n      var el1 = currentNode;\r\n      var el2 = currentNode.next;\r\n      if (el1 !== null && el2 !== null) {\r\n        if (callback(el1.val, el2.val)) {\r\n          var val1 = el1.val;\r\n          el1.val = el2.val;\r\n          el2.val = val1;\r\n        } else {\r\n          currentNode = el2;\r\n        }\r\n      } else {\r\n        currentNode = null;\r\n      }\r\n    }\r\n    len--;\r\n  }\r\n}\r\n\r\n/**\r\n * 链表函数\r\n * @param {*} initVal 初始节点值\r\n */\r\nexport function linkedList(initVal) {\r\n  if (initVal === undefined) {\r\n    return null;\r\n  }\r\n  this.data = new createNode(initVal);\r\n  this.map = function (...p) {\r\n    map(this.data, ...p);\r\n  };\r\n  this.length = function () {\r\n    return length(this.data);\r\n  };\r\n  this.find = function (...p) {\r\n    return find(this.data, ...p);\r\n  };\r\n  this.last = function () {\r\n    return last(this.data);\r\n  };\r\n  this.first = function () {\r\n    return first(this.data);\r\n  };\r\n  this.push = function (...p) {\r\n    push(this.data, ...p);\r\n    return this;\r\n  };\r\n  this.unshift = function (...p) {\r\n    unshift(this.data, ...p);\r\n    this.data = first(this.data);\r\n    return this;\r\n  };\r\n  this.insert = function (...p) {\r\n    insert(this.data, ...p);\r\n    return this;\r\n  };\r\n  this.del = function (...p) {\r\n    del(this.data, ...p);\r\n    return this;\r\n  };\r\n  this.setVal = function (...p) {\r\n    setVal(this.data, ...p);\r\n    return this;\r\n  };\r\n  this.exchange = function (...p) {\r\n    exchange(this.data, ...p);\r\n    return this;\r\n  };\r\n  this.sort = function (...p) {\r\n    sort(this.data, ...p);\r\n    this.data = first(this.data);\r\n    return this;\r\n  };\r\n}\r\n"]}