Last active
February 21, 2019 13:13
-
-
Save mikeyang01/99c7c5b19d6f7b5593448020603d8a86 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class LinkedList_deleteIndex { | |
public class LinkedList<E> { | |
private class Node{ | |
public E e; | |
public Node next; | |
public Node(E e, Node next){ | |
this.e = e; | |
this.next = next; | |
} | |
public Node(E e){ | |
this(e, null); | |
} | |
public Node(){ | |
this(null, null); | |
} | |
@Override | |
public String toString(){ | |
return e.toString(); | |
} | |
} | |
private Node dummyHead; | |
private int size; | |
public LinkedList(){ | |
dummyHead = new Node(); | |
size = 0; | |
} | |
// 获取链表中的元素个数 | |
public int getSize(){ | |
return size; | |
} | |
// 返回链表是否为空 | |
public boolean isEmpty(){ | |
return size == 0; | |
} | |
// 在链表的index(0-based)位置添加新的元素e | |
// 在链表中不是一个常用的操作,练习用:) | |
public void add(int index, E e){ | |
if(index < 0 || index > size) | |
throw new IllegalArgumentException("Add failed. Illegal index."); | |
Node prev = dummyHead; | |
for(int i = 0 ; i < index ; i ++) | |
prev = prev.next; | |
prev.next = new Node(e, prev.next); | |
size ++; | |
} | |
// 在链表头添加新的元素e | |
public void addFirst(E e){ | |
add(0, e); | |
} | |
// 在链表末尾添加新的元素e | |
public void addLast(E e){ | |
add(size, e); | |
} | |
// 获得链表的第index(0-based)个位置的元素 | |
// 在链表中不是一个常用的操作,练习用:) | |
public E get(int index){ | |
if(index < 0 || index >= size) | |
throw new IllegalArgumentException("Get failed. Illegal index."); | |
Node cur = dummyHead.next; | |
for(int i = 0 ; i < index ; i ++) | |
cur = cur.next; | |
return cur.e; | |
} | |
// 获得链表的第一个元素 | |
public E getFirst(){ | |
return get(0); | |
} | |
// 获得链表的最后一个元素 | |
public E getLast(){ | |
return get(size - 1); | |
} | |
// 修改链表的第index(0-based)个位置的元素为e | |
// 在链表中不是一个常用的操作,练习用:) | |
public void set(int index, E e){ | |
if(index < 0 || index >= size) | |
throw new IllegalArgumentException("Set failed. Illegal index."); | |
Node cur = dummyHead.next; | |
for(int i = 0 ; i < index ; i ++) | |
cur = cur.next; | |
cur.e = e; | |
} | |
// 查找链表中是否有元素e | |
public boolean contains(E e){ | |
Node cur = dummyHead.next; | |
while(cur != null){ | |
if(cur.e.equals(e)) | |
return true; | |
cur = cur.next; | |
} | |
return false; | |
} | |
// 从链表中删除index(0-based)位置的元素, 返回删除的元素 | |
// 在链表中不是一个常用的操作,练习用:) | |
public E remove(int index){ | |
if(index < 0 || index >= size) | |
throw new IllegalArgumentException("Remove failed. Index is illegal."); | |
Node prev = dummyHead; | |
for(int i = 0 ; i < index ; i ++) | |
prev = prev.next; | |
Node retNode = prev.next; | |
prev.next = retNode.next; | |
retNode.next = null; | |
size --; | |
return retNode.e; | |
} | |
@Override | |
public String toString(){ | |
StringBuilder res = new StringBuilder(); | |
Node cur = dummyHead.next; | |
while(cur != null){ | |
res.append(cur + "->"); | |
cur = cur.next; | |
} | |
res.append("NULL"); | |
return res.toString(); | |
} | |
} | |
public static void main(String[] args) { | |
LinkedList_deleteIndex add = new LinkedList_deleteIndex(); | |
LinkedList<Integer> linkedList = add.new LinkedList<>(); | |
for (int i = 0; i < 5; i++) { | |
linkedList.add(0, i); | |
} | |
System.out.println(linkedList); | |
System.out.println("remove head:" + linkedList.remove(0)); | |
System.out.println(linkedList); | |
System.out.println("remove mid:" + linkedList.remove(2)); | |
System.out.println(linkedList); | |
System.out.println("remove tail:" + linkedList.remove(2)); | |
System.out.println(linkedList); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment