你好,感谢所有帮助到目前为止,我已经完成了这个项目。在Java中需要帮助实现双向链表[最终]
现在生病了解释我的代码和我必须实现的特殊功能。 1.我的链表必须以特定数量的元素开始,你会在dll的构造函数中看到这一点。2.一种将新值输入到创建的元素中的方法。 3.我有一个get方法来获取某个节点的值。如果用户调用的索引值大于列表大小 ,也会创建新节点4.我还创建了一个将元素插入到特定位置的插入方法。
我的节点类看起来像这样(对不起,小写的类名):
public class node {
private int _value;
public node(int v){
_value = v;
}
public node(){
}
public int get(){
return _value;
}
public void set(int v){
_value = v;
}
public node next = null;
public node prev = null;
}
我的DLL类(奇怪的名字,我知道这个项目只是标题):
public class BetterArray{
private int _size;
private node _head;
private node _tail;
public BetterArray(int n){
_head = null;
_tail = null;
_size = n;
if(_head == null){
_head = new node(0);
_tail = _head;
}
for(int i = 1; i < n; i++){
node current = _head;
for(int j = 1; j < i; j++){
current = current.next;
}
node newNode = current.next;
current.next = new node(0);
current.next.next = newNode;
current.next.prev = current;
_tail = current.next;
}
}
public BetterArray(){
}
public int get(int index){
int value = 0;
node temp = _head;
if(index < _size){
for(int loc = 0; loc < index; loc++){
temp = temp.next;
}
value = temp.get();
}
else{
for(int i = _size; i <= index; i++){
node current = temp;
for(int j = _size; j < i; j++){
current = current.next;
}
node newNode = current.next;
current.next = new node(0);
_size++;
current.next.next = newNode;
current.next.prev = current;
_tail = current.next;
}
}
return value;
}
public void put(int value, int index){
node temp = _head;
if(index < _size){
for(int loc = 0; loc < index; loc++){
temp = temp.next;
}
temp.set(value);
}
else{
for(int i = _size; i < index; i++){
node current = temp;
for(int j = _size; j < i; j++){
current = current.next;
}
node newNode = current.next;
current.next = new node(value);
_size++;
current.next.next = newNode;
current.next.prev = current;
_tail = current.next;
}
}
}
public void insert(int value,int index){
node current = _head;
for(int loc = 0; loc < index - 1; loc++){
current = current.next;
}
node temp = current.next;
current.next = new node(value);
_size++;
current.next.next = temp;
current.next.prev = current;
_tail = current.next;
}
}
public void delete(int index){
node pre = _head;
for(int loc = 0; loc < index; loc++){
pre = pre.next;
}
node current = pre.next;
pre.next = current.next;
_size--;
}
public int getSize(){
return _size;
}
创建一个没有值的N个元素的链表是没有意义的。我的建议是,你不这样做。如果你必须,只需要调用'add(null)'N次,因为你必须实现'add()'。 – Andreas
@andreas我相信这是插入方法的目的或者是我的逻辑在这里是错误的 –
请注意,它更清楚如果你也有类名'节点'开始大写,因此'节点'。插入方法是用值创建一个新节点。 – martijnn2008