package com.example.demo1; public class MyList<T> { private int count = 0; private Node<T> firstNode = null; private Node<T> lastNode = null; public Node<T> getFirstNode() { return firstNode; } public Node<T> getLastNode() { return lastNode; } private static class Node<T> { Node<T> preNode; T t; Node<T> nextNode; public Node(Node<T> preNode, T t, Node<T> nextNode){ this.preNode = preNode; this.t = t; this.nextNode = nextNode; } public Node<T> getPreNode() { return preNode; } public T getT() { return t; } public Node<T> getNextNode() { return nextNode; } public void setPreNode(Node<T> preNode) { this.preNode = preNode; } public void setNextNode(Node<T> nextNode) { this.nextNode = nextNode; } } public void add(T t){ Node<T> node = new Node<>(lastNode,t,null); if(count == 0){ firstNode = node; lastNode = node; }else{ lastNode.nextNode = node; lastNode = node; } count ++; } public void addFirst(T t){ Node<T> node = new Node<>(null,t,firstNode); if(count == 0){ lastNode = node; firstNode = node; }else{ firstNode.preNode = node; firstNode = node; } count ++; } public void remove(){ if(count == 0){ return; } if(count == 1){ firstNode = null; lastNode = null; }else{ lastNode = lastNode.getPreNode(); lastNode.setNextNode(null); } count --; } public void removeFirst(){ if(count == 0){ return; } if(count == 1){ firstNode = null; lastNode = null; }else{ firstNode = firstNode.getNextNode(); firstNode.setPreNode(null); } count --; } public int size(){ return count; } public MyList<T> reverse(){ MyList<T> newList = new MyList<>(); if(count == 0){ return newList; } Node<T> tmpNode = lastNode; while(tmpNode!=null){ newList.add(tmpNode.getT()); tmpNode = tmpNode.getPreNode(); } return newList; } public void insertAfter(Node<T> node, T insertValue){ Node<T> insertNode = new Node<>(node,insertValue,node.nextNode); node.nextNode.preNode = insertNode; node.nextNode = insertNode; count ++; } public static void main(String[] args){ MyList<String> myList = new MyList<>(); myList.add("1"); myList.add("2"); myList.add("3"); myList.add("4"); myList.add("5"); Node<String> tmpNode = myList.getFirstNode(); while (tmpNode!=null){ System.out.println(tmpNode.getT()); tmpNode = tmpNode.getNextNode(); } MyList<String> reverseList = myList.reverse(); tmpNode = reverseList.getFirstNode(); reverseList.insertAfter(tmpNode,"0"); while (tmpNode!=null){ System.out.println(tmpNode.getT()); tmpNode = tmpNode.getNextNode(); } } }
package com.example.demo1; public class MyHeadList<T> { private int count = 0; private Node<T> head; private Node<T> last; { head = new Node<>(null,null,null); last = new Node<>(head,null,null); head.setNextNode(last); } public Node<T> getHead() { return head; } public Node<T> getLast() { return last; } static class Node<T> { Node<T> preNode; T t; Node<T> nextNode; public Node(Node<T> preNode, T t, Node<T> nextNode){ this.preNode = preNode; this.t = t; this.nextNode = nextNode; } public Node<T> getPreNode() { return preNode; } public T getT() { return t; } public Node<T> getNextNode() { return nextNode; } public void setPreNode(Node<T> preNode) { this.preNode = preNode; } public void setNextNode(Node<T> nextNode) { this.nextNode = nextNode; } } public void add(T t){ Node<T> node = new Node<>(last.preNode,t,last); last.preNode.nextNode = node; last.preNode = node; count ++; } public void addFirst(T t){ Node<T> node = new Node<>(head,t,head.nextNode); head.nextNode.preNode = node; head.nextNode = node; count ++; } public void remove(){ last.preNode = last.preNode.preNode; last.preNode.nextNode = last; count --; } public void removeFirst(){ head.nextNode = head.nextNode.nextNode; head.nextNode.preNode = head; count --; } public int size(){ return count; } public MyHeadList<T> reverse(){ MyHeadList<T> newList = new MyHeadList<>(); if(count == 0){ return newList; } Node<T> tmpNode = last.preNode; while(tmpNode!=head){ newList.add(tmpNode.getT()); tmpNode = tmpNode.getPreNode(); } return newList; } public void insertAfter(Node<T> node, T insertValue){ Node<T> insertNode = new Node<>(node,insertValue,node.nextNode); node.nextNode.preNode = insertNode; node.nextNode = insertNode; count ++; } public static void main(String[] args){ MyHeadList<String> myList = new MyHeadList<>(); myList.add("1"); myList.add("2"); myList.add("3"); myList.add("4"); myList.add("5"); Node<String> tmpNode = myList.getHead().nextNode; while (tmpNode!=myList.getLast()){ System.out.println(tmpNode.getT()); tmpNode = tmpNode.getNextNode(); } MyHeadList<String> reverseList = myList.reverse(); tmpNode = reverseList.getHead().nextNode; reverseList.insertAfter(tmpNode,"0"); while (tmpNode!=reverseList.getLast()){ System.out.println(tmpNode.getT()); tmpNode = tmpNode.getNextNode(); } } }