我试图找出是否有一种方法可以将我的两个班级合并为一个。我的程序只是一个循环链表,我必须使用尽可能少的类。我还希望帮助您设置一种方法,让我用另一个节点替换一个节点。这是我的两节课有什么想法吗?
第一个:
public class Node {
static int numOfLists = 0;
int data;
Node nextNode;
Node(int data) {
this.data = data;
numOfLists++;
}
}
第二个:
public class LinkedList {
// i = head
// j = tail
static Node i;
static Node temp;
static Node j;
int num;
Node nextNode;
public void addNodes(int data) {
Node node = new Node(data);
if (j == null) {
j = node;
j.nextNode = j;
} else {
i = j;
while (i.nextNode != j) {
i = i.nextNode;
}
i.nextNode = node;
node.nextNode = j;
}
}
public void print() {
i = j;
boolean list = false;
do {
System.out.print((list) ? "--> |" + i.data + "|" : "|" + i.data
+ "|");
list = true;
i = i.nextNode;
} while (i != j);
}
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addNodes(3);
list.addNodes(7);
list.addNodes(2);
list.addNodes(1);
list.print();
}
}
最佳答案
使用两个类是正确的方法。
每个班级都有不同的明确定义的职责,
这些应该是单独的类。
不要将它们混合在一起。
您当然可以,但是这将是非常糟糕的OOP,
所以不要这样做。
但是,Node
是链表的实现细节,实际上并不需要链表的用户看到。因此,将Node作为静态内部类移到链接列表类中,并将其设为私有。这样,遵循良好的封装和信息隐藏原则,从外面就看不到它。
这样(我还清理了其余的代码):
public class CircularLinkedList {
private static class Node {
private final int data;
private Node nextNode;
private Node(int data) {
this.data = data;
}
}
private Node head;
public void addNodes(int data) {
Node node = new Node(data);
if (head == null) {
head = node;
head.nextNode = head;
} else {
Node runner = head;
while (runner.nextNode != head) {
runner = runner.nextNode;
}
runner.nextNode = node;
node.nextNode = head;
}
}
public void print() {
Node runner = head;
boolean first = false;
do {
System.out.print((first) ? "--> |" + runner.data + "|" : "|" + runner.data + "|");
first = true;
runner = runner.nextNode;
} while (runner != head);
}
}