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