我试图找出是否有一种方法可以将我的两个班级合并为一个。我的程序只是一个循环链表,我必须使用尽可能少的类。我还希望帮助您设置一种方法,让我用另一个节点替换一个节点。这是我的两节课有什么想法吗?

第一个:

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);
    }
}

08-18 20:35