📌  相关文章
📜  删除链表的最后一个节点(1)

📅  最后修改于: 2023-12-03 14:50:21.292000             🧑  作者: Mango

删除链表的最后一个节点

在操作链表的过程中,删除某个节点是一个基本操作。本篇文章将介绍如何删除链表的最后一个节点。

算法原理

删除链表的最后一个节点需要遍历整个链表,找到最后一个节点并删除。由于单向链表只能从头节点往后找,因此需要额外记录当前节点的前一个节点。

算法步骤如下:

  1. 如果链表为空,返回空。
  2. 如果链表只有一个节点,则将链表的头指针置空。
  3. 遍历链表,找到最后一个节点和它的前一个节点。
  4. 将前一个节点的指针指向空,即删除最后一个节点。
  5. 返回链表的头指针。
代码实现

以下是 C++ 版本的代码实现:

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

ListNode* removeLastNode(ListNode* head) {
    if (!head) return head;
    if (!head->next) {
        delete head;
        return nullptr;
    }
    ListNode* prev = nullptr;
    ListNode* curr = head;
    while (curr->next) {
        prev = curr;
        curr = curr->next;
    }
    delete curr;
    if (prev) prev->next = nullptr;
    else head = nullptr;
    return head;
}
总结

本篇文章介绍了如何删除链表的最后一个节点,需要额外记录前一个节点,遍历链表找到最后一个节点并删除。实现过程需要注意边界条件处理,特别是链表为空和只有一个节点的情况。