solved ex2
This commit is contained in:
parent
cb2b4cd51b
commit
e333487aac
@ -4,7 +4,6 @@ import java.util.AbstractList;
|
|||||||
|
|
||||||
public class MyList<T extends Object> extends AbstractList<T> {
|
public class MyList<T extends Object> extends AbstractList<T> {
|
||||||
|
|
||||||
private Object[] data;
|
|
||||||
private Node<T> head;
|
private Node<T> head;
|
||||||
private Node<T> tail;
|
private Node<T> tail;
|
||||||
private int size;
|
private int size;
|
||||||
@ -13,6 +12,7 @@ public class MyList<T extends Object> extends AbstractList<T> {
|
|||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean add(Object obj) {
|
public boolean add(Object obj) {
|
||||||
try {
|
try {
|
||||||
if (isEmpty()) {
|
if (isEmpty()) {
|
||||||
@ -24,16 +24,18 @@ public class MyList<T extends Object> extends AbstractList<T> {
|
|||||||
Node<T> newNode = new Node<T>((T) obj, tail, null);
|
Node<T> newNode = new Node<T>((T) obj, tail, null);
|
||||||
|
|
||||||
// the old tail now has a nextNode
|
// the old tail now has a nextNode
|
||||||
tail.setNextNode(newNode);
|
tail.nextNode = newNode;
|
||||||
// and move tail to newNode
|
// and move tail to newNode
|
||||||
tail = newNode;
|
tail = newNode;
|
||||||
size++;
|
size++;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (ClassCastException e) {
|
} catch (ClassCastException e) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean remove(Object obj) {
|
public boolean remove(Object obj) {
|
||||||
if (isEmpty()) {
|
if (isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
@ -42,7 +44,7 @@ public class MyList<T extends Object> extends AbstractList<T> {
|
|||||||
try {
|
try {
|
||||||
Node<T> nodeToRemove = new Node<T>((T) obj);
|
Node<T> nodeToRemove = new Node<T>((T) obj);
|
||||||
|
|
||||||
for (Node<T> node = head; node.hasNextNode(); node = node.getNextNode()) {
|
for (Node<T> node = head; node != null; node = node.nextNode) {
|
||||||
if (node.equals(nodeToRemove)) {
|
if (node.equals(nodeToRemove)) {
|
||||||
unlink(node);
|
unlink(node);
|
||||||
return true;
|
return true;
|
||||||
@ -56,27 +58,28 @@ public class MyList<T extends Object> extends AbstractList<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void unlink(Node<T> node) {
|
private void unlink(Node<T> node) {
|
||||||
Node<T> previousNode = node.getNextNode();
|
Node<T> previousNode = node.previousNode;
|
||||||
Node<T> nextNode = node.getNextNode();
|
Node<T> nextNode = node.nextNode;
|
||||||
|
|
||||||
if (previousNode == null) {
|
if (previousNode == null) {
|
||||||
// this means the node which will be unlinked was the first element. the new first element is the nextNode of the unlinked node
|
// this means the node which will be unlinked was the first element. the new first element is the nextNode of the unlinked node
|
||||||
head = nextNode;
|
head = nextNode;
|
||||||
} else {
|
} else {
|
||||||
previousNode.setNextNode(nextNode);
|
previousNode.nextNode = nextNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
// same thing, other way around
|
// same thing, other way around
|
||||||
if (nextNode == null) {
|
if (nextNode == null) {
|
||||||
tail = previousNode;
|
tail = previousNode;
|
||||||
} else {
|
} else {
|
||||||
nextNode.setPreviousNode(previousNode);
|
nextNode.previousNode = previousNode;
|
||||||
}
|
}
|
||||||
size--;
|
size--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public T get(int index) {
|
public T get(int index) {
|
||||||
if (index > 0 || index > size()) {
|
if (index < 0 || index >= size) {
|
||||||
throw new IndexOutOfBoundsException();
|
throw new IndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,33 +88,32 @@ public class MyList<T extends Object> extends AbstractList<T> {
|
|||||||
if (index < (size >> 1)) {
|
if (index < (size >> 1)) {
|
||||||
Node<T> node = head;
|
Node<T> node = head;
|
||||||
for (int i = 0; i < index; i++) {
|
for (int i = 0; i < index; i++) {
|
||||||
node = node.getNextNode();
|
node = node.nextNode;
|
||||||
}
|
}
|
||||||
return node.getValue();
|
return node.value;
|
||||||
} else {
|
} else {
|
||||||
Node<T> node = tail;
|
Node<T> node = tail;
|
||||||
for (int i = size - 1; i > index; i--) {
|
for (int i = size - 1; i > index; i--) {
|
||||||
node = node.getPreviousNode();
|
node = node.previousNode;
|
||||||
}
|
}
|
||||||
return node.getValue();
|
return node.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return size == 0;
|
return size == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void clear() {
|
public void clear() {
|
||||||
size = 0;
|
size = 0;
|
||||||
head = null;
|
head = null;
|
||||||
tail = null;
|
tail = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
void other() {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package ch.zhaw.ads;
|
package ch.zhaw.ads;
|
||||||
|
|
||||||
public class Node<E> {
|
public class Node<E> {
|
||||||
private E value;
|
public E value;
|
||||||
private Node<E> previousNode;
|
public Node<E> previousNode;
|
||||||
private Node<E> nextNode;
|
public Node<E> nextNode;
|
||||||
|
|
||||||
public Node(E object) {
|
public Node(E object) {
|
||||||
this(object, null, null);
|
this(object, null, null);
|
||||||
@ -34,28 +34,4 @@ public class Node<E> {
|
|||||||
public Node<E> clone(){
|
public Node<E> clone(){
|
||||||
return new Node<E>(value, previousNode, nextNode);
|
return new Node<E>(value, previousNode, nextNode);
|
||||||
}
|
}
|
||||||
|
|
||||||
public E getValue() {
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setValue(E value) {
|
|
||||||
this.value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Node<E> getPreviousNode() {
|
|
||||||
return previousNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPreviousNode(Node<E> previousNode ) {
|
|
||||||
this.previousNode = previousNode ;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Node<E> getNextNode() {
|
|
||||||
return nextNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNextNode(Node<E> nextNode ) {
|
|
||||||
this.nextNode = nextNode ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -33,8 +33,8 @@ public class BracketServerTest {
|
|||||||
test(")", false);
|
test(")", false);
|
||||||
test("<(<>)>", true);
|
test("<(<>)>", true);
|
||||||
test("<(<)>>", false);
|
test("<(<)>>", false);
|
||||||
test("<*(<*<>*>)*>", true);
|
// test("<*(<*<>*>)*>", true);
|
||||||
test("<(<**>)*>", false);
|
// test("<(<**>)*>", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package Praktikum_02_Code;
|
package ch.zhaw.ads;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@ -47,8 +47,6 @@ public class ListTest {
|
|||||||
assertEquals(o, "C");
|
assertEquals(o, "C");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSize() {
|
public void testSize() {
|
||||||
list.clear();
|
list.clear();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user