Java 已排序的循环链表在删除元素后未得到更新?

Java 已排序的循环链表在删除元素后未得到更新?,java,data-structures,sortedlist,circular-list,Java,Data Structures,Sortedlist,Circular List,我正在实现一个排序的循环链表,首先用排序后的元素填充链表,然后实现插入和删除功能。但是,在调用delete时,它不会更新列表。我尝试在delete方法中调试代码,但还没有成功。下面是我的程序的代码片段 class CNode { public int data; public CNode next; public CNode() { this.data = 0; this.next = null; } public CN

我正在实现一个排序的循环链表,首先用排序后的元素填充链表,然后实现插入和删除功能。但是,在调用delete时,它不会更新列表。我尝试在delete方法中调试代码,但还没有成功。下面是我的程序的代码片段

class CNode {
    public int data;
    public CNode next;

    public CNode() {
        this.data = 0;
        this.next = null;
    }

    public CNode(int data, CNode next) {
        this.data = data;
        this.next = next;
    }

    public CNode(int data) {
        this.data = data;
        this.next = null;
    }
}
驾驶舱呢-

public class SortedCLL {
    public static CNode head = new CNode();
    public static CNode last = new CNode();
    public static int NoN;

    public SortedCLL() {
        int N = 3;
        int val[] = {4, 2, 6};
        Arrays.sort(val);
        CNode first = new CNode(val[0]);
        head.next = first;
        last.next = first;
        NoN++;

        for (int i = 1; i < N; i++) {
            CNode n = new CNode(val[i]);
            last.next.next = n;
            last.next = n;
            n.next = head.next;
            NoN++;
        }

        //DELETING AN ELEMENT
        delete(2);

        //INSERTING AN ELEMENT
        insert(7);

        CNode check = head.next;
        for (int i = 0; i < NoN; i++) {
            System.out.print(check.data + " ");
            check = check.next;
        }

    }

    public static void main(String args[]) throws Exception {
        new SortedCLL();
    }

    private void insert(int element) {
        CNode n = new CNode(element);
        if(element < head.next.data) {
            n.next = head.next;
            head.next = n;
            last.next.next = n;
            NoN++;
            return;
        }
        int nodes = NoN - 1;
        CNode iter =  head;
        while(nodes-- > 0){
            if(iter.data < element && iter.next.data > element) {
                n.next = iter.next;
                iter.next = n;
                NoN++;
                return;
            }
        }
        last.next.next = n;
        last.next = n;
        n.next = head.next;
        NoN++;
        return;
    }

    private void delete(int element) {
        //System.out.println( " :  " +element);
        CNode prev = last.next;
        CNode iter =  head.next;
        int nodes = NoN;
        while(nodes-- > 0) {
            if(iter.data == element) {
                //HERE IT IS PRINTING CORRECT PREV AND NEXT NODE'S DATA.
                System.out.println( prev.data + " :  " +iter.next.data);
                prev.next = iter.next;
                NoN--;
                return;
            }
            prev = iter;
            iter = iter.next;
        }
        return;
    }

}
467

2 4 6 7


感谢您的帮助

您忘记了删除列表头的边缘情况,这需要执行
head=head.next删除时


此外,你并没有真正处理任何地方的空列表的情况,所以要小心

我猜CNode中的静态int应该计算列表的大小?你最好把它放在抽屉里。因为该类应该能够处理多个实例。此外,您应该在主类中而不是在构造函数中测试您的类。您明白您的意思,但这仍然不能解决我的问题!!:(你所说的是更好的做法来规划这个问题,但即使这样做了,也不能解决我面临的问题。你能告诉我如何解决实际问题吗?谢谢!
expected list
program's list