在这里回顾我的基本 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(节点);
谁能看到这个原因/告诉我我的工作是否正确?再次非常感谢!