2017-12-05 6 views
0

整数の配列をとり、JavaScriptで単独リンクされたリストを作成することに問題があります。それは簡単に聞こえますが、私が持っている機能では見ていないことがあります。私があなたに提供できる助けを感謝します。整数の配列から1つのリンクされたリストを作成する

これは私がノードを作るために使用するコンストラクタ関数です:

function ListNode(val) { 
    this.val = val; 
    this.next = null; 
} 

そして、これは私はそれが配列を取り、そこからリンクされたリストを作成することになっている書いている機能です。私はカップルの基本的な配列でこれを実行しようとしました

var createLinkedList = function(array) { 
    var head = new ListNode(parseInt(array[0])); 
    array.shift(); 
    while(array.length) { 
     var prev = new ListNode(parseInt(array[0])); 
     head.next = head; 
     prev = head; 
     array.shift(); 
    } 
    return head; 
} 

、それは常にちょうど配列内の最後の値を返します。基本的な考え方は、そこに何がシフトする残っていないのですまで最初の値をオフシフトだけで、whileループでありますリンクされたリストの代わりに。私はここで見ていない単純なものがありますか?前もって感謝します。

+0

ヒント: 'head.next = head'は循環参照を作成します。 'prev = head'はどうしたと思いますか? – nnnnnn

+0

'parseInt(array.shift())'と言うと、最初の要素の値を取得して1行ですべて取り除くことができるので、 'array [0]'と'array.shift()'を個別に実行します。 – nnnnnn

+0

コメントエリアに希望の出力を貼り付けてください。 –

答えて

1

問題はarray.shiftではなく、whileループの中でどのようにノードをリンクさせますか。チェーンに

一緒ノード、基本的に、あなたは何をする必要があります。

var new_node = new ListNode(parseInt(array[0])); 
head.next = new_node; 
new_node = new ListNode(parseInt(array[1])); 
head.next.next = new_node; 
new_node = new ListNode(parseInt(array[2])); 
head.next.next.next = new_node; 
. 
. 
. 

私はあなたのアイデアを得ると思います。だからあなたがやりたいことは、whileループを再加工することです。head.next.next.next.next.next = newNodeを呼び出す代わりにtailNodeの参照を保存すると、whileループ内でtailNode.next = newNodetailNode = newNodeを呼び出すことができます。

+0

私はそれを試みているが、私は頭を最初にどのようにリンクさせるのか分からない。 [link] https://jsfiddle.net/9xh5b5kr/は私が今使っているものですが、意味があれば頭にリンクする方法はありません。 – amacdonald

+0

循環参照を作成し、単独でリンクされたリストには意味を持たない 'current.next = current; 'があります。この[link](https://jsfiddle.net/9xh5b5kr/)を見て、newNodeとtailノードの関係について考えてみてください。 – mckuok

+0

私は本当にここで失われています。 https://jsfiddle.net/9xh5b5kr/はこれまでに試したことですが、配列の最初と最後の値を使って頭と尾を作成し、その間のすべてを無視します。 – amacdonald

関連する問題