/*** 节点类* @author JP* */
class Node {Object value;//节点元素值Node pre;//上一个节点Node next;//下一个节点public Node(Object value) {this.value = value;}
}/*** 链表类* @author JP**/
public class MyLinkedList {Node cur;//目前指向的节点Node head;//头结点Node end;//尾节点int size = 0;/*** 实例化头节点和尾节点*/public MyLinkedList() {head = new Node("head");end = new Node("end");//设置头尾相连head.next = end;end.pre = head;}/*** 增加操作* @param value*/public void add(Object value) {//判断当前插入的元素是否是第一个元素if (cur == null) {cur = new Node(value);head.next = cur;cur.pre = head;} else {Node node = new Node(value);cur.next = node;node.pre = cur;cur = node;//将cur元素设置为当前插入的节点}cur.next = end;end.pre = cur;size++;}/*** 在指定位置插入元素,第一个元素的下标为0* @param index* @param value* @throws Exception*/public void add(int index, Object value) throws Exception {//判断当前要插入的元素是否为链表的最后一个元素if (index == size) {this.add(value);} else {Node tmp = this.get(index);//当前index位置所对应的节点Node node = new Node(value);//当前要插入的节点tmp.pre.next = node;node.pre = tmp.pre;node.next = tmp;tmp.pre = node;}size++;}/*** 删除指定位置的元素,第一个元素的下标为0* @param index* @throws Exception */public void remove(int index) throws Exception {Node tmp = this.get(index);//当前index位置所对应的节点tmp.pre.next = tmp.next;tmp.next.pre = tmp.pre;size--;}/*** 获取指定位置的节点元素* @param index* @return* @throws Exception */public Node get(int index) throws Exception {if (index < 0 || index >= size) {throw new Exception("数组下标越界!");}Node node = head.next;for (int i = 1; i <= index; i++) {node = node.next;//迭代为下一个节点}return node;}/*** 将链表转化成数组* @return*/public Object[] toArray() {Object[] arr = new Object[size];Node node = head.next;for (int i = 0; i < arr.length; i++) {arr[i] = node.value;node = node.next;//迭代为下一个节点}return arr;}public static void main(String[] args) throws Exception {MyLinkedList list = new MyLinkedList();list.add(1);list.add(2);list.add(3);list.add(4);//list.remove(4);//list.add(4,"a");Object[] arr = list.toArray();for (Object obj : arr) {System.out.println(obj);}}
}