先创建一个节点
package LinkedList;
public class Node {
int val;
Node next;
Node prev;
public Node(int val) {
this.val = val;
}
@Override
public String toString() {
return " "+val;
}
}
创建一条链表
package LinkedList;
public class MyLinkedList {
private Node head;
private Node tail;
private int length = 0;
public MyLinkedList() {
head = null;
tail = null;
}
public int getLength(){
return this.length;
}
public void print(){
Node node = head;
while(node!=null){
System.out.print(node);
node = node.next;
}
System.out.println();
}
public void addFisrt(Node node){
if(head == null){
head = node;
tail = node;
length++;
return ;
}
node.next = head;
head.prev = node;
head = node;
length++;
}
public void addlast(Node node){
if(head == null){
head = node;
tail = node;
length++;
return ;
}
tail.next = node;
node.prev = tail;
tail = tail.next;
length++;
}
public void add(int index,Node node){
if(index<0 || index> length){
return;
}
if(index == 0){
addFisrt(node);
return;
}
if(index == length){
addlast(node);
return;
}
Node nextNode = getNode(index);
node.next = nextNode;
node.prev = nextNode.prev;
nextNode.prev.next =node;
nextNode.prev = node;
length++;
}
public void removeFrist(){
if(head == null){
return;
}
if(head.next == null){
head = null;
tail = null;
length = 0;
return;
}
head.next.prev =null;
head = head.next;
length--;
}
public void removeLast(){
if(head == null){
return;
}
if(head.next == null){
head = null;
tail = null;
length = 0;
return;
}
tail = tail.prev;
tail.next = null;
length--;
}
public void remove(int index){
if(index<0 || index>=length){
return;
}
if(index == 0){
removeFrist();
return;
}
if(index == length-1){
removeLast();
return;
}
Node toRemove = getNode(index);
toRemove.prev.next = toRemove.next;
toRemove.next.prev = toRemove.prev;
length--;
}
public void removeByNode(Node node) {
int index = indeof(node);
remove(index);
}
public Node getNode(int index) {
Node cur = head;
for (int i=0;i<index;i++){
cur =cur.next;
}
return cur;
}
public int indeof(Node node) {
Node cur = head;
for(int i=0;i<length;i++){
if(cur == node)
return i;
cur = cur.next;
}
return -1;
}
public void set(Node node,int value){
if(indeof(node)==-1){
return;
}
node.val =value;
}
}
测试程序
package LinkedList;
public class Test {
public static void main(String[] args) {
MyLinkedList list = new MyLinkedList();
Node node =new Node(1);
list.addFisrt(node);
list.print();
Node node1 =new Node(2);
list.addFisrt(node1);
list.print();
Node node2 = new Node(0);
list.addlast(node2);
list.print();
Node node3 =new Node(3);
list.add(1,node3);
list.print();
list.removeByNode(node3);
list.print();
list.set(node,4);
list.print();
}
}
结果展示