0
我正在创建一个实现Iterable.I的自定义链表,它试图从迭代器的remove方法中调用我包含的类方法remove方法,但我无法这么做。它说:“The remove()方法中的类型是不适用的参数(INT)”无法从内部类访问包含类方法
这里是我的代码:
package collections.customCollections.linkedList;
import java.util.Iterator;
public class LinkedList<T> implements Iterable<T>{
private Link<T> head;
private Link<T> tail;
private int size;
public int getSize() {
return size;
}
public LinkedList(){
head = null;
tail = null;
size=0;
}
public void addAtEnd(T data){
Link<T> newNode = new Link<T>(data);
//Insert as first element
if(head == null){
head = newNode;
tail = newNode;
}
else{
newNode.previous = tail;
tail.next = newNode;
tail = newNode;
}
size++;
}
public void addAtStart(T data){
Link<T> newNode = new Link<T>(data);
if(head == null){
head = newNode;
tail = newNode;
}
else{
newNode.next = head;
head.previous = newNode;
head=newNode;
}
size++;
}
//prints the entire linked list
public void print(){
Link<T> traversalNode = head;
if(head == null){
System.out.println("Empty Linked List");
}
else{
while(traversalNode != null){
System.out.print(traversalNode.data +"->");
traversalNode=traversalNode.next;
}
}
}
public T remove(int index){
int i=1;
Link<T> traversalNode = head;
while(i<index){
traversalNode=traversalNode.next;
i++;
}
if(traversalNode.next==null){
removefromEnd();
}
else if(traversalNode.previous==null){
removeFromStart();
}
else{
traversalNode.previous.next=traversalNode.next;
traversalNode.next.previous=traversalNode.previous;
traversalNode.next=null;
traversalNode.previous=null;
}
return traversalNode.data;
}
public T removefromEnd(){
Link<T> nodeToRemove = tail;
tail = nodeToRemove.previous;
tail.next = null;
size--;
return nodeToRemove.data;
}
public T removeFromStart(){
Link<T> nodeToRemove = head;
head = nodeToRemove.next;
head.previous = null;
size--;
return nodeToRemove.data;
}
public T get(int index)
{ Link<T> returnedNode = head;
int i = 1;
while(i < index){
returnedNode=returnedNode.next;
i++;
}
return returnedNode.data;
}
private class Link<T>{
private T data;
private Link<T> next = null;
private Link<T> previous = null;
public Link(T data){
this.data = data;
}
}
@Override
public Iterator<T> iterator() {
return new Iterator<T>(){
private int position;
@Override
public boolean hasNext() {
if(position<getSize()){
return true;
}
return false;
}
@Override
public T next() {
T data=get(position);
position++;
return data;
}
@Override
public void remove() {
remove(position);
}
};
}
}
编辑:我得到我可以调用使用LinkedList.this.remove方法( )。我更感兴趣知道为什么它可以直接调用removefromEnd()并且不能直接调用此方法?
但为什么我能够直接调用外部类的removefromEnd()? – 2014-10-18 15:56:59
我编辑了我的答案。 – Seelenvirtuose 2014-10-18 15:59:50
但编译器不应该根据参数的类型或名称区分函数吗? – 2014-10-18 16:06:31