双向链表与单向链表大同小异,只不过双向链表还有个节点指向最后一个节点
新建工程,结构如下
package list; public class MyList { long size; Node firstNode; Node lastNode; public long getSize() { return size; } public Node getFirstNode() { return firstNode; } public void setFirstNode(Node firstNode) { this.firstNode = firstNode; } public Node getLastNode() { return lastNode; } public void setLastNode(Node lastNode) { this.lastNode = lastNode; } @Override public String toString() { return "MyList [size=" + size + ", firstNode=" + firstNode + ", lastNode=" + lastNode + "]"; } public class Node{ private int value; private Node preNode; private Node nextNode; private Node() { } public Node(int value) { this.value = value; } private void setValue(int value) { this.value = value; } public int getValue() { return value; } public Node getPreNode() { return preNode; } private void setPreNode(Node preNode) { this.preNode = preNode; } public Node getNextNode() { return nextNode; } private void setNextNode(Node nextNode) { this.nextNode = nextNode; } @Override public String toString() { return "Node [value=" + value + "]"; } } }测试1:本身没有节点,使用setFirstNode
@Test void testSetFirstNode1() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); myList.setFirstNode(node1); System.out.println(myList); }结果 测试1:本身没有节点,使用addNode
@Test void testAddNode1() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); myList.addNode(node1); System.out.println(myList); }结果
测试3:使用addNode添加第一个节点,setFirstNode替换掉
@Test void testAddAndSetFirst() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); myList.addNode(node1); myList.setFirstNode(node2); System.out.println(myList); }结果 测试4:使用setFirstNode设置第一个节点,addNode添加节点
@Test void testSetFirstAndAdd() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); myList.setFirstNode(node1); myList.addNode(node2); System.out.println("链表"+myList); System.out.println(myList.queryAll()); }结果 测试5 使用addNode添加第一个节点,setLastNode替换最后一个节点
@Test void testAddAndSetLast() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); myList.addNode(node1); System.out.println("替换前"+myList); myList.setLastNode(node2); System.out.println("替换后"+myList); }结果 测试6:使用setFirstNode添加第一个节点,setLastNode替换最后一个节点
@Test void testsetFirstAndSetLast() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); myList.setFirstNode(node1); System.out.println("替换前"+myList); myList.setLastNode(node2); System.out.println("替换后"+myList); }结果 测试7:有两个节点,setLastNode替换最后一个节点
@Test void testSetLast() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); Node node3 = new MyList().new Node(3); myList.setFirstNode(node1); myList.addNode(node2); System.out.println("替换前"+myList); myList.setLastNode(node3); System.out.println("替换后"+myList); }结果
测试8:当前没有节点,使用setLastNode添加最后一个节点
@Test void testSetLasttNode1() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); myList.setLastNode(node1); System.out.println(myList); }结果 测试9:当前有节点,使用setLastNode添加最后一个节点
@Test void testSetLasttNode2() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); myList.setFirstNode(node1); System.out.println("替换前"+myList); myList.setLastNode(node2); System.out.println("替换后"+myList); }结果
同单向链表一致,不适合做修改以及查询操作,现在还是只删除第一个节点以及最后一个节点。
测试1:没有节点使用deleteFirstNode
@Test void testdeleteFirstNode() { MyList myList = new MyList(); myList.deleteFirstNode(); }测试2:没有节点使用deleteLastNode
@Test void testdeleteLastNode() { MyList myList = new MyList(); myList.deleteLastNode(); }测试3:有一个节点使用deleteFirstNode
@Test void testdeleteFirstNode2() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); myList.setFirstNode(node1); System.out.println("删除前"+myList); myList.deleteFirstNode(); System.out.println("删除后"+myList); }结果 测试4:有一个节点使用deleteLastNode
@Test void testdeleteLasttNode2() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); myList.setFirstNode(node1); System.out.println("删除前"+myList); myList.deleteLastNode(); System.out.println("删除后"+myList); }结果 测试5:有两个节点使用deleteFirstNode
@Test void testdeleteFirstNode3() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); myList.setFirstNode(node1); myList.addNode(node2); System.out.println("删除前"+myList); myList.deleteFirstNode(); System.out.println("删除后"+myList); }结果 测试6:有两个节点使用deleteLastNode
@Test void testdeleteLasttNode3() { MyList myList = new MyList(); Node node1 = new MyList().new Node(1); Node node2 = new MyList().new Node(2); myList.setFirstNode(node1); myList.addNode(node2); System.out.println("删除前"+myList); myList.deleteLastNode(); System.out.println("删除后"+myList); }结果