ここに、SLLを使用して乗算するJavaScriptがあります。
var x0 = {rank: 0, value: 11};
var x1 = {rank: 1, value: 5};
var x2 = {rank: 2, value: 7};
/* 11 + 5x + 7x^2 */
var SLL = {data: x0, next: {data: x1, next: {data: x2, next: null}}};
var DLL = {data: x0, prev: null, next: null};
DLL.next = {data: x1, prev: DLL, next: null};
DLL.next.next = {data: x2, prev: DLL.next, next: null};
function mulSLL(a, b) {
var result = null;
var m1 = a;
while(m1 != null) {
var m2 = b;
var mr = result; //re-use pointer into result
while(m2 != null) {
var val = {rank: m1.data.rank + m2.data.rank, value: m1.data.value * m2.data.value};
if(result == null) { //initial create
result = {data: val, next: null};
} else {
var mrold = null;
while(mr != null && mr.data.rank < val.rank) {
mrold = mr;
mr = mr.next;
}
if(mr != null) {
if(mr.data.rank == val.rank) { //merge
mr.data.value += val.value;
} else { // insert
var mrnext = mr.next;
mr.next = {data: val, next: mrnext};
}
} else { // add
mrold.next = {data: val, next: null};
}
}
m2 = m2.next;
}
m1 = m1.next;
}
// output result
mr = result;
while(mr != null) {
console.log(' + ' + mr.data.value + 'x^' + mr.data.rank);
mr = mr.next;
}
return result;
}
mulSSL(SLL,SLL);
- 編集*あなたがロジックのほとんどが結果を構築起こることに気づくでしょうコードビット
をクリーンアップ。 私の入力は最低のランクから最高のものにソートされているので、SLLの代わりにDLLアプローチを使用してもほとんど得られません。私は主な違いはメモリの量だと思う(DLLは、各ノードのために余分なポインタの価値 'prev'を取るだろう。)入力が 'ランク'(読み込み:電力)で並べ替えられなかったならば、最終的に挿入されたノードから始めて、 'rank'比較に基づいて 'prev'または 'next'に移動させます。
多項式を掛けることはリンクリストとは関係ありません。 **具体的な質問はここにありますか? –
私はそれについて心配していますので、ポリノミカルな係数を保持するデータ構造について話しています。 –
リンクされたリストを使用したIMPLEMENTAIONに関する問題のケース –