Java 多链表的实现
我正在尝试为一个项目用Java实现多链接列表Java 多链表的实现,java,list,data-structures,nodes,Java,List,Data Structures,Nodes,我正在尝试为一个项目用Java实现多链接列表 package project1; import java.lang.IllegalArgumentException; import project1.MLLNode; class MLList { private int nbSets; private MLLNode head; public MLList(int _nbSets) { if (_nbSets <= 0)
package project1;
import java.lang.IllegalArgumentException;
import project1.MLLNode;
class MLList {
private int nbSets;
private MLLNode head;
public MLList(int _nbSets) {
if (_nbSets <= 0)
throw(new IllegalArgumentException("- Illegal Number of Sets (" +
_nbSets + ")!"));
nbSets = _nbSets;
head = MLLNode.create(0,null);
}
public boolean isEmpty(MLLNode.LType ltype) {
return(head.getNext(ltype) == null);
}
public void display(MLLNode.LType ltype) {
System.out.print("[ ");
MLLNode node = head.getNext(ltype);
while(node != null) {
node.display();
System.out.print(" ");
node = node.getNext(ltype);
}
System.out.print("]");
}
public boolean insert(int id, Object data) {
MLLNode newnode = MLLNode.create(id, data);
if(isEmpty(MLLNode.LType.ALL)){
head.setNext(MLLNode.LType.ALL, newnode);
newnode.setNext(MLLNode.LType.ALL, null);
}else{
MLLNode first = head.getNext(MLLNode.LType.ALL);
head.setNext(MLLNode.LType.ALL, newnode);
newnode.setNext(MLLNode.LType.ALL, first);
}
if(isEmpty(MLLNode.LType.XOR)){
head.setNext(MLLNode.LType.XOR, newnode);
newnode.setNext(MLLNode.LType.XOR, null);
}else{
MLLNode first = head.getNext(MLLNode.LType.XOR);
head.setNext(MLLNode.LType.XOR, newnode);
newnode.setNext(MLLNode.LType.XOR, first);
}
if(isEmpty(MLLNode.LType.ANY)){
head.setNext(MLLNode.LType.ANY, newnode);
newnode.setNext(MLLNode.LType.ANY, null);
}else{
MLLNode first = head.getNext(MLLNode.LType.ANY);
head.setNext(MLLNode.LType.ANY, newnode);
newnode.setNext(MLLNode.LType.ANY, first);
}
return true;
}
}
public Object delete(int id) {
if (!isEmpty(MLLNode.LType.ALL)){
MLLNode previous = head;
MLLNode current = head.getNext(MLLNode.LType.ALL);
int obj_id = 0;
while(obj_id != id && current != null){
previous = current;
current = current.getNext(MLLNode.LType.ALL);
obj_id++;
}
if (current != null){
previous.setNext(MLLNode.LType.ALL, current.getNext(MLLNode.LType.ALL));
}else{
previous.setNext(MLLNode.LType.ALL, null);
}
return current;
}
if (!isEmpty(MLLNode.LType.XOR)){
MLLNode previous = head;
MLLNode current = head.getNext(MLLNode.LType.XOR);
int obj_id = 0;
while(obj_id != id && current != null){
previous = current;
current = current.getNext(MLLNode.LType.XOR);
obj_id++;
}
if (current != null){
previous.setNext(MLLNode.LType.XOR, current.getNext(MLLNode.LType.XOR));
}else{
previous.setNext(MLLNode.LType.XOR, null);
}
return current;
}
if (!isEmpty(MLLNode.LType.ANY)){
MLLNode previous = head;
MLLNode current = head.getNext(MLLNode.LType.ANY);
int obj_id = 0;
while(obj_id != id && current != null){
previous = current;
current = current.getNext(MLLNode.LType.ANY);
obj_id++;
}
if (current != null){
previous.setNext(MLLNode.LType.ANY, current.getNext(MLLNode.LType.ANY));
}else{
previous.setNext(MLLNode.LType.ANY, null);
}
return current;
}
return null;
}
public Object find(MLLNode.LType ltype, int id) {
}
packageproject1;
导入java.lang.IllegalArgumentException;
导入project1.MLLNode;
类别列表{
私人国际电视台;
专用MLLNode头;
公共MLList(整数集){
如果(_nbSets欢迎来到stackoverflow!请查看常见问题解答,了解如何提出好的问题,以便获得好的答案。您至少应该自己尝试过一些东西,最好展示一些您尝试过的代码(不仅仅是练习中的样板代码),谢谢您的建议,先生!)我同意你提出的观点,但我只需要一个想法。不是代码本身:)我在这里取得了一些进展,但我坚持这一点:/有想法吗?你说“你被卡住了”是什么意思?什么有效?什么不起作用?你希望非工作部分做什么?它们做什么?它运行并显示如下:-Any:[9(0)8(0)4(0)10(0)14(0)10(0)6(0)3(0)19(0)15(0)18(0)]-所有:[9(0)8(0)4(0)10(0)10(0)14(0)10(0)6(0)3(0)19(0)15(0)]-异或:[9(0)8(0)4(0)10(0)14(0)10(0)6(0)6(0)3(0)19(0)15(0)]我创建了一个显示列表的应用程序,但我需要在这里显示计数器值
package project1;
import java.util.EnumMap;
class MLLNode {
public enum LType {ANY, ALL, XOR};
public int count;
public int id;
public Object data;
private EnumMap<LType,MLLNode> next;
private MLLNode(int _id, Object _data) {
id = _id;
data = _data;
count = 0;
next = new EnumMap<LType,MLLNode>(LType.class);
next.put(LType.ANY,null);
next.put(LType.ALL,null);
next.put(LType.XOR,null);
}
public static MLLNode create(int _id, Object _data) {
return(new MLLNode(_id,_data));
}
public MLLNode getNext(LType ltype) {
return(next.get(ltype));
}
public MLLNode setNext(LType ltype, MLLNode ref) {
next.put(ltype, ref);
return(ref);
}
public void display() {
System.out.print(id + " (" + count + ")");
}
}