2017-02-05 5 views
1

一方向リンクのリストが与えられていれば、各要素の値を以前のノードの値で更新したいと思います。例えば、リスト1 - > 2 - > 3 - > nullのため、実行後にはnew_value - > 1 - > 2 - > nullとなり、各繰り返しでnew_valueが与えられます。リンクされたリストの各要素を前の要素のデータで更新する

私は(擬似コード)を行うことを試みた何

は次のとおりです。

list_head = head 
for i = length-1 to 0: 
    current = head 
    do i times: 
     prev_data = current.data 
     current = current.next 
    current.data = prev_data 

私が何をしないのです...しかし、正常に動作するようには思えないのですか?それを行う別の方法はありますか?

EDIT:NEW_VALUEはすでにあなたにも配列でリストを実装することができ、この時点で頭に事前

+0

出力は何ですか? – CKing

+0

それは大きなプロジェクトの一部ですので、その答えはちょっと複雑です:)しかし、私は最終的に望ましい結果を見ません... – DanielY

+0

私が見る直面の問題は、あなたが常に "現在の"次の反復のために「頭を付ける」。それは私に間違って見える。あなたは「尾」を参照していますか? – CKing

答えて

0

感謝が割り当てられていることを前提としています。ここでは、JavaScriptの実装です。それが役に立てば幸い。

var array = [1,2,3]; // list with array 
 
var newValue = 4; 
 
function push(value){ 
 
array.pop(); // to remove the last element 
 
array.unshift(value); // to add the new element 
 
console.log(array); 
 
} 
 
push(newValue);

0

私はあなたが二つのループを使用する必要があります理由が表示されていない - 私はあなたの問題は、「私回やる」に関係している疑いがあります。代わりに、私は単にテールに達するまで(そして最後の値が削除されるまで)リストを通して値をプッシュすることを提案します。そのアイデアの実装は非常に単純なNodeクラスを使用して、次のとおりです。

function Node(data,next=null) { 
 
\t this.data = data; 
 
\t this.next = next; 
 
\t this.toString = function() { 
 
\t \t if(this.next) return this.data + " -> " + this.next.toString(); 
 
\t \t else return this.data + " -> null"; 
 
\t } 
 
} 
 

 
var head = new Node(1,new Node(2,new Node(3))); 
 
console.log(head.toString()) 
 

 
var new_value = 0; 
 
var curr = head; 
 
do{ 
 
\t var old_value = curr.data; 
 
\t curr.data = new_value; 
 
\t new_value = old_value; 
 
\t curr = curr.next; 
 
} while(curr) 
 

 
console.log(head.toString());

関連する問題