Java实现 MyLinkedList
**实现:
- add(e);
- add (int index,String e);
- remove (int index);
- contains (String e);
- indexOf (String e)
- lastIndexOf (String e);
- isEmpty ();
- get (int index)
- set (int index,String e)
- clear ()
**
public class MyLinkedlist {
public Node head;
public Node last;
public int size;
//先是一个空链表
public MyLinkedlist(){
head = null;
last = null;
size = 0;
}
//尾插 o(1)
public boolean add(String e){
Node node = new Node(e);
if (head == null){
head = last = node;
}else{
node.prev = last;
last.next = node;
last = node;
}
size++;
return true;
}
public void add(int index,String e) {
Node node = new Node(e);
if (index < 0 || index > size()) {
throw new ArrayIndexOutOfBoundsException();
}
if (size == 0){
head = last = node;
}
if (index == 0) {
node.next=head;
head.prev=node;
head = node;
} else if(index == size()) {
add(e);
}else{
Node prev = head;
for (int i = 0; i < index - 1; i++) {
prev = prev.next;
}
Node next = prev.next;
prev.next = node;
next.prev = node;
node.prev = prev;
node.next = next;
}
size++;
}
public int size(){
return size;
}
//remove
public String remove(int index){
if (index<0 ||index>=size()){
throw new ArrayIndexOutOfBoundsException();
}
String e;
if (size==1){
e = head.val;
head = last = null;
}else if (index==0){
e = head.val;
head = head.next;
head.prev = null;
}else if(index==size()-1){
e = last.val;
last = last.prev;
last.next=null;
}else {
Node toDelete = head;
for (int i=0;i<index;i++) {
toDelete = toDelete.next;
}
e = toDelete.val;
Node prev = toDelete.prev;
Node next = toDelete.next;
prev.next = next;
next.prev = prev;
}
size--;
return e;
}
public boolean contains(String e){
for (Node cur =head;cur!= null;cur=cur.next){
if (cur.val.equals(e)){
return true;
}
}
return false;
}
public int indexOf(String e){
int i = 0;
for (Node cur = head;cur!=null;cur = cur.next){
if (cur.val.equals(e)){
return i;
}
i++;
}
return -1;
}
public int lastIndexOf(String e){
int i = size-1;
for (Node cur = last;cur!=null;cur = cur.prev){
if (cur.val.equals(e)){
return i;
}
i--;
}
return -1;
}
public boolean isEmpty(){
return size==0;
}
//o(n)
public String get(int index){
if (index<0 ||index>=size()){
throw new ArrayIndexOutOfBoundsException();
}
Node cur =head;
for (int i=0;i<index-1;i++) {
cur = cur.next;
}
return cur.val;
}
//o(n)
public String set(int index,String e){
if (index<0 ||index>=size()){
throw new ArrayIndexOutOfBoundsException();
}
Node cur =head;
for (int i=0;i<index-1;i++) {
cur = cur.next;
}
String old = cur.val;
cur.val = e;
return old;
}
public void clear(){
head =null;
last = null;
size =0;
}