package service;
public class LinkedListClass implements LinkedListTest{
private Node first;
private Node last;
private int size;
@Override
public void add(Object obj) {
linkLast(obj);
size++;
}
@Override
public void add(int index, Object obj) {
if (index < 0 || index > size) {
throw new IllegalArgumentException();
我的手机 2018/6/23 21:19:39
}
if (index == size)
linkLast(obj);
else
linkBefore(obj, node(index));
size++;
}
private void linkBefore(Object obj, Node node) {
Node temp = new Node(null, obj, node);
Node up = node.prev;
if (up != null) {
up.next = temp;
temp.prev = up;
node.prev = temp;
} else {
first = temp;
我的手机 2018/6/23 21:19:58
}
}
private void linkLast(Object obj) {
Node temp = new Node(last, obj, null);
if (first == null)
first = last = temp;
else {
last.next = temp;
last = temp;
}
}
private Node node(int index) {
Node node = first;
if (node != null) {
for (int i = 0; i < index; i++) {
node = node.next;
我的手机 2018/6/23 21:20:17
}
}
return node;
}
@Override
public void remove(Object obj) {
int index = 0;
for (Node temp = first; temp != null;) {
if (temp.obj.equals(obj)) {
temp = temp.next;
remove(index);
} else {
temp = temp.next;
index++;
}
}
}
@Override
我的手机 2018/6/23 21:20:37
public void remove(int index) {
rangCheck(index);
Node temp = node(index);
Node up = temp.prev;
Node down = temp.next;
if (up == null) {
down.prev = null;
first = down;
size--;
return;
}
if (down == null) {
up.next = null;
last = up;
size--;
return;
}
up.next = down;
我的手机 2018/6/23 21:21:03
down.prev = up;
size--;
}
@Override
public Object get(int index) {
rangCheck(index);
Node temp = node(index);
return temp == null ? null : temp.obj;
}
private void rangCheck(int index) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException();
}
}
@Override
public void set(int index, Object obj) {
rangCheck(index);
21:21:37
我的手机 2018/6/23 21:21:37
Node temp = node(index);
temp.obj = obj;
}
@Override
public int indexOf(Object obj) {
int index = 0;
for (Node temp = first; temp != null;) {
if (temp.obj.equals(obj)) {
return index;
}
temp = temp.next;
index++;
}
return -1;
}
@Override
public boolean isEmpty() {
return first == null ? true : false;
我的手机 2018/6/23 21:21:52
}
@Override
public void clear() {
for (Node temp = first; temp != null;) {
Node next = temp.next;
temp.prev = null;
temp.obj = null;
temp.next = null;
temp = next;
}
size = 0;
first = last = null;
}
@Override
public int size() {
return size;
我的手机 2018/6/23 21:22:09
}
private class Node {
Node prev;
Object obj;
Node next;
Node(Node prev, Object obj, Node next) {
this.prev = prev;
this.obj = obj;
this.next = next;
}
}
}
public class LinkedListClass implements LinkedListTest{
private Node first;
private Node last;
private int size;
@Override
public void add(Object obj) {
linkLast(obj);
size++;
}
@Override
public void add(int index, Object obj) {
if (index < 0 || index > size) {
throw new IllegalArgumentException();
我的手机 2018/6/23 21:19:39
}
if (index == size)
linkLast(obj);
else
linkBefore(obj, node(index));
size++;
}
private void linkBefore(Object obj, Node node) {
Node temp = new Node(null, obj, node);
Node up = node.prev;
if (up != null) {
up.next = temp;
temp.prev = up;
node.prev = temp;
} else {
first = temp;
我的手机 2018/6/23 21:19:58
}
}
private void linkLast(Object obj) {
Node temp = new Node(last, obj, null);
if (first == null)
first = last = temp;
else {
last.next = temp;
last = temp;
}
}
private Node node(int index) {
Node node = first;
if (node != null) {
for (int i = 0; i < index; i++) {
node = node.next;
我的手机 2018/6/23 21:20:17
}
}
return node;
}
@Override
public void remove(Object obj) {
int index = 0;
for (Node temp = first; temp != null;) {
if (temp.obj.equals(obj)) {
temp = temp.next;
remove(index);
} else {
temp = temp.next;
index++;
}
}
}
@Override
我的手机 2018/6/23 21:20:37
public void remove(int index) {
rangCheck(index);
Node temp = node(index);
Node up = temp.prev;
Node down = temp.next;
if (up == null) {
down.prev = null;
first = down;
size--;
return;
}
if (down == null) {
up.next = null;
last = up;
size--;
return;
}
up.next = down;
我的手机 2018/6/23 21:21:03
down.prev = up;
size--;
}
@Override
public Object get(int index) {
rangCheck(index);
Node temp = node(index);
return temp == null ? null : temp.obj;
}
private void rangCheck(int index) {
if (index < 0 || index >= size) {
throw new IllegalArgumentException();
}
}
@Override
public void set(int index, Object obj) {
rangCheck(index);
21:21:37
我的手机 2018/6/23 21:21:37
Node temp = node(index);
temp.obj = obj;
}
@Override
public int indexOf(Object obj) {
int index = 0;
for (Node temp = first; temp != null;) {
if (temp.obj.equals(obj)) {
return index;
}
temp = temp.next;
index++;
}
return -1;
}
@Override
public boolean isEmpty() {
return first == null ? true : false;
我的手机 2018/6/23 21:21:52
}
@Override
public void clear() {
for (Node temp = first; temp != null;) {
Node next = temp.next;
temp.prev = null;
temp.obj = null;
temp.next = null;
temp = next;
}
size = 0;
first = last = null;
}
@Override
public int size() {
return size;
我的手机 2018/6/23 21:22:09
}
private class Node {
Node prev;
Object obj;
Node next;
Node(Node prev, Object obj, Node next) {
this.prev = prev;
this.obj = obj;
this.next = next;
}
}
}