在Java中如何从循环链表中删除节点?

owfi6suc  于 2023-01-04  发布在  Java
关注(0)|答案(1)|浏览(187)

给定一个循环链表,用Java写一个方法删除一个节点.

bjp0bcyl

bjp0bcyl1#

实际上有四种情况需要考虑。

    • 案例1:**

列表是否为空?如果为空,则返回null或

    • 案例2:**

列表中只有一个元素。将指针设置为null,将列表设置为null。

    • 案例3:**

删除列表前面的内容。在这个例子中我们有几个步骤。

    • 步骤:**

1.创建一个指向列表的临时指针。
1.移动到列表末尾。
1.将临时指针设置到列表的前面。
1.向前移动列表的前端。
1.将temp的指针设置为空。
1.将列表的末尾设置为指向列表的新前端。

    • 案例4:**

在我们删除中间项的地方,以1-〉2-〉3-〉的格式删除一些东西。注意。这也适用于删除最后一项,因为它会循环回到1。

    • 步骤**

1.创建一个指向列表的临时指针。
1.向前移动临时指针,直到找到要删除的数据。
1.创建一个删除节点(示例节点删除)并将其设置为temp的指针。
1.设置temp以跳过要删除的节点。
1.将删除节点的指针设置为null。

public void delete(int data) {
    // Null list case
    if(list == null) return;

    // Delete the only element case
    if(list.data == data && list.next.data == list.data) {
        list.next = null;
        list = null;
        return;
    }

    // Delete the front of the list case
    if(list.data == data) {

        // Move to the end of the list
        Node end = list;
        while(end.next.data != list.data) {
            end = end.next;
        }

        Node temp = list;   
        list = list.next;
        temp.next = null;
        end.next = list;
        return;
    }

    // Delete something in the middle
    Node temp = list;
    while(temp.next.data != data && temp.next.data != list.data) {
        temp = temp.next;
    }

    // We circled the list and did not find the element to delete       
    if(temp.next.data == list.data) return; 

    Node del = temp.next;
    temp.next = temp.next.next;
    del.next = null;
}

相关问题