ここで ADT の基本的な内容に戻ってインタビューに備えて修正し、その間に Java を学習することで一石二鳥です。一般的なリンクリストを使用してマージソートの単純なアルゴリズムを作成しようとしています(これは私が自分で作成しています)。私が最初に想像していたよりもはるかに難しいことが証明されています! 誰でも私を助けてくれますか?基本的な作業から始めて、さらに進んだらこの投稿を更新します。
一般的なリンク リストの私のコードは次のとおりです。
public class NodeList<T extends Comparable<T> > {
private T head;
public NodeList<T> tail;
public NodeList( T item, NodeList<T> list ) {
head = item;
tail = list;
}
}
次のように、作成した別のクラスでこのクラスにアクセスしようとしています。
public class MyList<T extends Comparable<T>> {
private NodeList<T> nodes;
private static int size;
public MyList( ) {
nodes = null;
}
public MyList(T[] array ){
for( T item : array ) {
nodes = new NodeList<T>(item, nodes);
}
size = array.length;
}
public void add( T item ) {
nodes = new NodeList<T>( item, nodes );
size++;
}
public void addEnd( T item ) {
NodeList<T> temp = nodes;
while ( temp == null || temp.tail != null) {
temp = temp.tail;
}
size++;
temp.tail = new NodeList<T> ( item, null);
}
これまでのところ、リストの先頭とリストの末尾にそれぞれジェネリックを追加する必要がある add メソッドと addEnd メソッドまではすべて正しいと思います。
私のコードは次のように続きます:
public static <S extends Comparable<S>>
MyList<S> sort( MyList<S> list ) {
if ( size > 1 ) {
MyList<S> left = leftHalf( list );
MyList<S> right = rightHalf( list );
list = merge( left, right );
}
return list;
}
private static <S extends Comparable<S>>
MyList<S> merge( MyList<S> left, MyList<S> right ) {
}
private static <S extends Comparable<S>>
MyList<S> leftHalf( MyList<S> list ) {
MyList <S> leftSide = new MyList();
int middle;
if(size % 2 == 1) {
middle = size +1;
} else {
middle = size;
}
for ( int countToMiddle = 0; countToMiddle < middle ; countToMiddle++ ) {
leftSide.addEnd(nodes);
}
// return elements from 0 .. list.size() / 2
}
そして、私はエラーが発生します:
MyList の addEnd(S) は (NodeList) に適用できません
実行時に発生する
leftSide.addEnd(ノード);
誰かがこれの理由を見ることができますか/私の仕事のこの時点まで私が正しいかどうか教えてください? どうもありがとうございました!