Solved Task 3
This commit is contained in:
parent
6ee5e173c4
commit
6c80c7ae06
|
@ -15,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
|||
* @author
|
||||
* @version 1.00 2017/8/30
|
||||
*/
|
||||
/**
|
||||
|
||||
public class ADS2_3_test {
|
||||
MyList list;
|
||||
|
||||
|
@ -98,4 +98,3 @@ public class ADS2_3_test {
|
|||
}
|
||||
}
|
||||
}
|
||||
*/
|
|
@ -0,0 +1,171 @@
|
|||
package ch.zhaw.ads;
|
||||
|
||||
import java.util.AbstractList;
|
||||
import java.util.Comparator;
|
||||
import java.util.Spliterator;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.IntFunction;
|
||||
import java.util.function.Predicate;
|
||||
import java.util.function.UnaryOperator;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
public class MyList extends AbstractList {
|
||||
MyNode head;
|
||||
MyNode tail;
|
||||
|
||||
@Override
|
||||
public boolean add(Object o) {
|
||||
if(head == null)
|
||||
{
|
||||
head = new MyNode(null, null, o);
|
||||
tail = head;
|
||||
} else {
|
||||
MyNode actualNode = head;
|
||||
while (actualNode.getNextNode() != null) {
|
||||
actualNode = actualNode.getNextNode();
|
||||
}
|
||||
actualNode.setNextNode(new MyNode(null, actualNode, o));
|
||||
tail = actualNode.getNextNode();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean remove(Object o){
|
||||
MyNode actualNode = head;
|
||||
while(actualNode != null) {
|
||||
if(actualNode.getData() == o){
|
||||
MyNode previousNode = actualNode.getPreviousNode();
|
||||
MyNode nextNode = actualNode.getNextNode();
|
||||
|
||||
if(previousNode == null) {
|
||||
head = nextNode;
|
||||
} else {
|
||||
previousNode.setNextNode(nextNode);
|
||||
}
|
||||
|
||||
if(nextNode == null) {
|
||||
tail = previousNode;
|
||||
} else {
|
||||
nextNode.setPreviousNode(previousNode);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
actualNode = actualNode.getNextNode();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object get(int index) {
|
||||
MyNode actualNode = head;
|
||||
for(int i = 0; i < index; i++) {
|
||||
if(actualNode != null) {
|
||||
actualNode = actualNode.nextNode;
|
||||
} else {
|
||||
throw new IndexOutOfBoundsException();
|
||||
}
|
||||
}
|
||||
return actualNode.getData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEmpty() {
|
||||
return head == null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clear(){
|
||||
head = null;
|
||||
tail = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forEach(Consumer action) {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Spliterator spliterator() {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream stream() {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream parallelStream() {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public int size() {
|
||||
if(head == null){
|
||||
return 0;
|
||||
}
|
||||
MyNode actualNode = head;
|
||||
int count = 1;
|
||||
for(; actualNode.getNextNode() != null; count++){
|
||||
actualNode = actualNode.getNextNode();
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeIf(Predicate filter) {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] toArray(IntFunction generator) {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void replaceAll(UnaryOperator operator) {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sort(Comparator c) {
|
||||
throw new UnsupportedOperationException("Method not implemented!");
|
||||
}
|
||||
|
||||
private class MyNode {
|
||||
private MyNode nextNode;
|
||||
private MyNode previousNode;
|
||||
private Object data;
|
||||
|
||||
MyNode(MyNode nextNode, MyNode previousNode, Object data){
|
||||
setNextNode(nextNode);
|
||||
setPreviousNode(previousNode);
|
||||
setData(data);
|
||||
}
|
||||
|
||||
public void setNextNode(MyNode nextNode) {
|
||||
this.nextNode = nextNode;
|
||||
}
|
||||
|
||||
public MyNode getNextNode() {
|
||||
return nextNode;
|
||||
}
|
||||
|
||||
public void setPreviousNode(MyNode previousNode) {
|
||||
this.previousNode = previousNode;
|
||||
}
|
||||
|
||||
public MyNode getPreviousNode() {
|
||||
return previousNode;
|
||||
}
|
||||
|
||||
public void setData(Object data) {
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public Object getData() {
|
||||
return data;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue