📌  相关文章
📜  Java程序从循环链表的末尾删除一个节点(1)

📅  最后修改于: 2023-12-03 15:32:04.966000             🧑  作者: Mango

循环链表是一种特殊的链表数据结构,其最后一个节点指向头节点,形成一个循环。对于循环链表的删除操作,需要考虑删除头节点、删除尾节点和删除中间节点的情况。本文将介绍如何使用Java程序从循环链表的末尾删除一个节点。

准备工作

在开始编写代码之前,需要先定义循环链表节点的数据结构。通常情况下,循环链表节点包含两个字段,一个是数据域,另一个是指向下一个节点的指针。下面是定义循环链表节点的Java代码:

public class ListNode {
    int val;
    ListNode next;
    ListNode(int x) {
        val = x;
        next = null;
    }
}
删除末尾节点

对于循环链表的删除末尾节点操作,需要先找到倒数第二个节点,然后将其next指针指向头节点。由于循环链表的最后一个节点指向头节点,因此删除后的链表仍然是循环链表。下面是Java代码实现:

public ListNode deleteLastNode(ListNode head) {
    if (head == null || head.next == null) {
        return null;
    }
    ListNode cur = head;
    while (cur.next.next != head) {
        cur = cur.next;
    }
    cur.next = head;
    return head;
}

该代码中,若链表为空或只有一个节点,则直接返回null。否则,遍历链表找到倒数第二个节点,将其next指针指向头节点,最后返回新的头节点。

测试

为了验证删除末尾节点的程序是否正确,需要编写相应的测试代码。下面是一个简单的测试用例:

ListNode head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);
head.next.next.next = head; // 将最后一个节点指向头节点
deleteLastNode(head);

该测试用例创建了一个包含3个节点的循环链表,然后调用deleteLastNode方法删除末尾节点。如果程序运行正确,删除后的链表应该只有2个节点,并且最后一个节点指向头节点。

总结

本文介绍了从循环链表的末尾删除一个节点的Java实现方法。通过定义节点数据结构,编写删除末尾节点的程序,并编写测试用例进行验证,可以确保程序正确性。