2
アルゴリズムの質問。リスト1, 2, 3, 4, 5
とサブリスト2, 3
を持っているとしましょう。アルゴリズムは、サブリストがインデックス1から始まるため、1を返します。指定されたサブリストが存在しない場合、アルゴリズムは-1を返します。サブリストのインデックスを見つける
このようなデータ構造が定義されています(Node
)。
Node.java
private static class Node {
public Node(int value) {
this.value = value;
this.next = null;
}
int value;
Node next;
}
私は次のアルゴリズムを作ってみたが、それはパフォーマンスの面でより優れたを取得する場合、私は興味があります。
public static int findSublistIndex(MyLinkedList list, MyLinkedList sublist) {
if (list.head == null || sublist.head == null) {
return -1;
}
int index = -1;
for (Node l = list.head; l != null; l = l.next) {
index ++;
// encountered a value that is equal to the first value of a sublist
if (l.value == sublist.head.value) {
Node n = l;
// check the rest of the sublist
for (Node s = sublist.head; s != null; s = s.next) {
if (n.value == s.value && s.next == null) {
return index;
} else if (n.value == s.value) {
n = n.next;
} else {
// the pointer should be set to l here to skip repeating? l = n;? -- doesn't work!
break;
}
}
}
}
return -1;
}
さらに、このようなリストアルゴリズムの問題をいくつか練習したいと思います。このような問題を抱えているウェブサイトをお勧めしますか
で見つけることができる、それはプログラミングを実践する場所のための作業のアルゴリズムと勧告の見直しを要求するので、私は、オフトピックとして、この質問を閉じるために投票しています。 – dasblinkenlight
@dasblinkenlightだから何が問題なの?私はアルゴリズムの可能な改善を求めています。そして、アドバイスをどこで練習するべきか尋ねない理由... – wesleyy
この質問は、スタックオーバーフローのofftopicです。そのような質問を投稿するには、[コードレビューサイト](https://codereview.stackexchange.com/)を参照してください。さらに、オフサイトのリソースの推奨を求める質問は、サイトの明白な排除である。 – dasblinkenlight