自定义类实现LinkedList的部分功能
public class MyLinkedList<T>{
private Node<T> head;
private int size;
public MyLinkedList() {
}
public Node<T> getHead() {
return head;
}
public int size() {
return size;
}
public void add(T value) {
Node<T> newNode = new Node<>(value,null);
if(head == null) {
head = newNode;
}else {
Node<T> temp = head;
while(temp.getNext()!=null) {
temp = temp.getNext();
}
temp.setNext(newNode);
}
size++;
}
public T remove(int index) {
Node<T> temp = head;
if(index<0 || index>=size) {
throw new ArrayIndexOutOfBoundsException("索引越界");
}else if(index == 0){
head = head.getNext();
}else{
for(int i = 0;i<index-1;i++) {
temp = temp.getNext();
}
}
T obj = temp.getNext().getData();
temp.setNext(temp.getNext().getNext());
size--;
return obj;
}
public T get(int index) {
Node<T> temp = head;
if(index<0 || index>=size) {
throw new ArrayIndexOutOfBoundsException("索引越界");
}else {
for(int i = 0;i<index;i++) {
temp = temp.getNext();
}
}
return temp.getData();
}
public T set(int index,T newData) {
Node<T> temp = head;
if(index<0 || index>=size) {
throw new ArrayIndexOutOfBoundsException("索引越界");
}else {
for(int i = 0;i<index;i++) {
temp = temp.getNext();
}
}
T oldData = temp.getData();
temp.setData(newData);
return oldData;
}
@Override
public String toString() {
Node<T> temp = head;
StringBuilder sb = new StringBuilder();
while(temp!=null) {
sb.append(temp.getData()+" ");
temp = temp.getNext();
}
return sb.toString();
}
}
class Node<T>{
private T data;
private Node<T> next;
public Node() {
}
public Node(T data,Node<T> next) {
this.data = data;
this.next = next;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
public Node<T> getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
}
测试类结果
public class MyLinkedListTest {
public static void main(String[] args) {
MyLinkedList<String> list = new MyLinkedList<String>();
list.add("一");
list.add("起");
list.add("爬山");
list.add("吗?");
System.out.println(list);
System.out.println(list.size());
System.out.println(list.remove(3));
System.out.println(list.get(2));
System.out.println(list.set(2, "游泳"));
System.out.println(list);
}
}
一 起 爬山 吗?
4
吗?
爬山
爬山
一 起 游泳