In diesem Artikel werden hauptsächlich relevante Informationen zur detaillierten Erläuterung der Implementierung einer doppelt verknüpften Liste in Java vorgestellt. Freunde, die sie benötigen, können sich auf
Detaillierte Erläuterung der Implementierung einer doppelt verknüpften Liste in Java beziehen
Die bidirektionale verknüpfte Liste ist eine grundlegende Datenstruktur. LinkedList hat diese Struktur bereits in Java implementiert, aber als Entwickler müssen Sie auch in der Lage sein, diese Struktur selbst anzuzeigen. Hier ist ohne weiteres der Code:
Zuerst ist die Knotenklasse der verknüpften Liste:
/** * 链表节点 * @author Administrator * * @param <T> */ public class ChainNode<T> { private T data; //对象编号 private int dataNo; public ChainNode<T> nextChainNode; public ChainNode<T> preChainNode; public ChainNode(T data, ChainNode<T> nextChainNode, ChainNode<T> preChainNode) { this.data = data; this.nextChainNode = nextChainNode; this.preChainNode = preChainNode; } public ChainNode(T data) { this.data = data; } public int getDataNo() { return dataNo; } public void setDataNo(int dataNo) { this.dataNo = dataNo; } public void setData(T data) { this.data = data; } public T getData() { return data; } }
Dann ist die verknüpfte Liste :
<pre name="code" class="java">/** * 链表实现类 * @author Administrator * * @param <T> */ public class Chain<T> { //头节点 private ChainNode<T> headNode; //末尾节点指针 private ChainNode<T> lastNode; private int size; //创建链表就创建头节点 public Chain() { this.headNode = new ChainNode<T>(null); this.lastNode = headNode; } //增加一个节点 public void addNode(T data) { ChainNode<T> node = new ChainNode<T>(data); if(lastNode != null){ lastNode.nextChainNode = node; node.preChainNode = node; node.setDataNo(size); lastNode = node; size++; } } //删除指定索引的节点 public void deleteNode(int dataNo) throws Exception { if(getSize() == 0){ throw new Exception("chain is empty"); } for (ChainNode<T> node = headNode.nextChainNode;node != null;node = node.nextChainNode) { if(node.getDataNo() == dataNo){ node.preChainNode.nextChainNode = node.nextChainNode; if(node.nextChainNode != null){ node.nextChainNode.preChainNode = node.preChainNode; } node.nextChainNode = null; node.preChainNode = null; size--; //重新设置节点的编号 for (ChainNode<T> chainNode = node.nextChainNode;chainNode != null;chainNode = chainNode.nextChainNode) { chainNode.setDataNo(chainNode.getDataNo()-1); } return; } } throw new Exception("the corresponding data that can not be found"); } //获取指定索引的节点 public T get(int dataNo) throws Exception { if(getSize() == 0){ throw new Exception("chain is empty"); } for (ChainNode<T> node = headNode.nextChainNode;node != null;node = node.nextChainNode) { if(node.getDataNo() == dataNo){ return node.getData(); } } throw new Exception("the corresponding data that can not be found"); } //修改对应索引的节点 public void set(int dataNo,T data) throws Exception { if(getSize() == 0){ throw new Exception("chain is empty"); } for (ChainNode<T> node = headNode.nextChainNode;node != null;node = node.nextChainNode) { if(node.getDataNo() == dataNo){ node.setData(data); return; } } throw new Exception("the data that is to be modified can not be found"); } //是否包含对应数据的节点 public boolean isContains(T data) throws Exception { if(getSize() == 0){ throw new Exception("chain is empty"); } for (ChainNode<T> chainNode = headNode.nextChainNode;chainNode != null;chainNode = chainNode.nextChainNode) { if(chainNode.getData() == data){ return true; } } return false; } //获取节点数量(不含头节点) public int getSize() { return size; } }
Testen Sie es:
public class ChainTest { public static void main(String[] args) throws Exception{ String oneString = "one"; String twoString = "two"; String threeString = "three"; String fourString = "four"; Chain<String> chain = new Chain<String>(); chain.addNode(oneString); chain.addNode(twoString); chain.addNode(threeString); chain.addNode(fourString); for (int i = 0; i < chain.getSize(); i++) { String string2 = chain.get(i); System.out.println(string2); } try { String string = chain.get(2); System.out.println("the data of the second node is"+string); System.out.println(chain.isContains(fourString)); chain.set(1, "haha"); System.out.println("modify chain"); for (int i = 0; i < chain.getSize(); i++) { String string2 = chain.get(i); System.out.println(string2); } chain.deleteNode(3); System.out.println("delete one node"); for (int i = 0; i < chain.getSize(); i++) { String string2 = chain.get(i); System.out.println(string2); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Ergebnis:
one two three four the data of the second node isthree true modify chain one haha three four delete one node one haha three
Das obige ist der detaillierte Inhalt vonBeispielcode-Freigabe für die Java-Implementierung einer doppelt verknüpften Liste. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!