두 배로 링크 된 목록을 실행할 때마다 목록의 뒤에서 제거 할 때를 제외하고 모든 방법이 작동합니다. 나는 4, 3, 9였던 목록을 가지고 있었다. 나는 앞쪽에서 제거했다. 그런 다음이 메서드를 호출하여 9를 제거해야했습니다. 대신 DL 목록을 호출 할 때 null (3도 제거함)을 반환합니다. 도와주세요. (; 생성 된 코드는 문제에 대한 필요가 없습니다, 그래서 우리는 그것을 작성하지 않은 .. 즉, 노드는 중요하지 않습니다 후 물건 인터페이스를 확장) 여기 이중 연결 목록 Java 뒤에서 지우기
public Object removeLast() {
Object result = null;
if (!isEmpty()) {
result = lastNode.getData();
lastNode = lastNode.getPreviousNode();
if (lastNode == null)
firstNode = null;
else
lastNode.setNextNode(null);
}
return result;
}
코드의 나머지 부분입니다 정확한 코드 : 어쩌면 누락
--numberOfEntries
이 있지만
public class DList implements DoubleEndedListInterface {
public Node lastNode;
public Node firstNode; // reference to first node
public int numberOfEntries;
@Override
public String toString() {
return "" + firstNode;
}
public Node getNodeAt(int givenPosition) {
assert !isEmpty() && (1 <= givenPosition)
&& (givenPosition <= numberOfEntries);
Node currentNode = firstNode;
// traverse the list to locate the desired node
for (int counter = 1; counter < givenPosition; counter++)
currentNode = currentNode.getNextNode();
assert currentNode != null;
return currentNode;
} // end getNodeAt
public void addFirst(Object newEntry) {
Node newNode = new Node(newEntry);
if (firstNode == null)
{
firstNode = newNode;
lastNode = newNode;
numberOfEntries++;
}
else
{
newNode.setNextNode(firstNode);
firstNode.setPreviousNode(newNode);
firstNode = newNode;
numberOfEntries++;
} // end if
} // end add
public void addLast(Object newEntry) {
Node newNode = new Node(newEntry);
if (firstNode == null)
{
firstNode = newNode;
//lastNode = newNode;
numberOfEntries++;
}
else
{
lastNode.setNextNode(newNode);
lastNode = newNode;
numberOfEntries++;
} // end if
} // end add
@Override
public Object removeFirst() {
Object result = firstNode.getData();
firstNode = firstNode.getNextNode();
if (numberOfEntries == 1)
lastNode = null; // solitary entry was removed
numberOfEntries--;
return result; // return removed entry, or
// null if operation fails
} // end remove
@Override
public Object removeLast() {
Object result = null;
if (!isEmpty()) {
result = lastNode.getData();
lastNode = lastNode.getPreviousNode();
if (lastNode == null)
firstNode = null;
else
lastNode.setNextNode(null);
}
return result;
}
@Override
public Object getFirst() {
// TODO Auto-generated method stub
return firstNode.getData();
}
@Override
public Object getLast() {
// TODO Auto-generated method stub
return lastNode.getData();
}
@SuppressWarnings("unchecked")
@Override
public void moveToEnd() {
Object temp = (Object) remove(1);
add(numberOfEntries + 1, temp);
}
public class Node {
public Object data; // entry in bag
public Node next; // link to next node
public Node previous;
public Node(Object dataPortion) {
this(dataPortion, null, null);
} // end constructor
public Node(Object dataPortion, Node nextNode, Node previousNode) {
data = dataPortion;
next = nextNode;
previous = previousNode;
} // end constructor
public Object getData() {
return data;
} // end getData
public void setData(Object newData) {
data = newData;
} // end setData
public Node getNextNode() {
return next;
} // end getNextNode
public Node getPreviousNode() {
return previous;
}
public void setPreviousNode(Node previous) {
this.previous = previous;
}
public void setNextNode(Node nextNode) {
next = nextNode;
} // end setNextNode
@Override
public String toString() {
return "Node [data=" + data + ", next=" + next + "]";
}
} // end Node
@Override
public void add(Object newEntry) {
// TODO Auto-generated method stub
}
@Override
public boolean add(int newPosition, Object newEntry) {
// TODO Auto-generated method stub
return false;
}
@Override
public Object remove(int givenPosition) {
// TODO Auto-generated method stub
return null;
}
@Override
public void clear() {
// TODO Auto-generated method stub
}
@Override
public boolean replace(int givenPosition, Object newEntry) {
// TODO Auto-generated method stub
return false;
}
@Override
public Object getEntry(int givenPosition) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean contains(Object anEntry) {
// TODO Auto-generated method stub
return false;
}
@Override
public int getLength() {
// TODO Auto-generated method stub
return 0;
}
@Override
public boolean isEmpty() {
boolean result;
if (numberOfEntries == 0) // or getLength() == 0
{
assert firstNode == null;
result = true;
} else {
assert firstNode != null;
result = false;
} // end if
return result;
} // end isEmpty
@Override
public void swap(int i, int j) {
// TODO Auto-generated method stub
}
@Override
public boolean isTooBig() {
// TODO Auto-generated method stub
return false;
}
@Override
public void reduceArray() {
// TODO Auto-generated method stub
}
@Override
public Object[] toArray() {
// TODO Auto-generated method stub
return null;
}
@Override
public void makeRoom(int newPosition) {
// TODO Auto-generated method stub
}
@Override
public void removeGap(int givenPosition) {
// TODO Auto-generated method stub
}
@Override
public boolean removeObject(Object anObject) {
// TODO Auto-generated method stub
return false;
}
@Override
public int getPosition(Object anObject) {
// TODO Auto-generated method stub
return 0;
}
@Override
public void append(ListInterface bList) {
// TODO Auto-generated method stub
}
}
두 번째 호출이 아닌 처음 위치에서'removeLast'를 호출하면 어떻게됩니까? 또한 제대로 도움이되는 충분한 코드가 여기에 없습니다 ... 코드 디버깅을 쉽게하기 위해 나머지 코드를 게시 하시겠습니까? – abiessu
코드가 정상적으로 작동하는 이유를 잘 모르겠지만 더 많은 코드를 제공하면 구현시 오류를 식별하는 데 도움이 될 수 있습니다. 또한 @abiessu는 무언가에있을 수 있습니다. 마지막으로 호출하지 않고 처음 호출 할 때 어떤 일이 발생하는지 알려 주어야합니다. – Pandacoder
내 돈이'lastNode'를 제대로 설정하지 않았습니다. 코드가 많으면 잘못 될 수 있습니다. – kviiri