が発生します。スイッチング・ノード私は、次のノードのコンストラクタ持つ無限再帰
const Node = function(data){
this.data = data
this.next = null
this.previous = null
}
私のLinkedListコンストラクタの内部で使用されています
const LinkedList = function(){
this.head = new Node('head')
}
をし、私は、ノードを挿入することができます以下の方法:
find
の方法は:
LinkedList.prototype.find = function(item){
let currentNode = this.head
while(currentNode && currentNode.data !== item){
currentNode = currentNode.next
}
return currentNode
}
そして、次のような方法で、配列などの項目を表示することができます。
LinkedList.prototype.toArray = function(){
const arr = []
let currItem = this.head.next
while(currItem){
arr.push(currItem.data)
currItem = currItem.next
}
return arr
}
私の問題は、今私は、私は2つの値を渡すことができLinkedListの上switch
機能を実装しようとしていますされており、リスト内でその位置を切り替えます。以下は、私が持っている、お互いに隣接していないアイテムのために働くように思われているもの:これは私のコンピュータは、私は交換時に無限再帰をヒットさせるために引き起こしている私は、私がここで間違ってやっているかと思っています
LinkedList.prototype.switch = function(a,b){
const aNode = this.find(a),
bNode = this.find(b)
if(!aNode || !bNode){
throw new Error('Both nodes were not inside of the list')
}
const aNext = aNode.next,
aPrevious = aNode.previous,
bNext = bNode.next,
bPrevious = bNode.previous
aNode.next = bNext
aNode.previous = bPrevious
aNode.previous.next = aNode
bNode.next = aNext
bNode.previous = aPrevious
bNode.previous.next = bNode
}
互いのすぐ隣にある要素。例えば、コードの以下の行は動作します:私は、次のコードを持っている場合
const list = new LinkedList()
list.insert(1)
list.insert(2,1)
list.insert(3,2)
list.switch(1,3)
list.toArray() // [3,2,1]
はしかし、それ
const list = new LinkedList()
list.insert(1)
list.insert(2,1)
list.switch(1,2)
list.toArray() // crashes terminal
私はそれが私のswitch
方法で愚かな論理エラーです知っているが、私はのためにすることはできません私の人生は何が分かりますか?
「find()」関数はどこにありますか? – Pointy
@Pointyは、findメソッドを表示するために投稿を編集しました –
再割り当てする前に、両方のエントリに対して '.previous.next'の値を取得する必要があると思います。 – Pointy