使用C++删除链表的最后一个节点

什么是链表?

链表是一种非常常见的数据结构,它由一些节点组成。每个节点都指向下一个节点,这样就形成了一个链式结构。链表非常适合插入删除操作,但是不适合随机访问,因为它的访问时间复杂度是O(n)。

链表的节点结构通常如下:

struct ListNode {

int val;

ListNode *next;

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

};

其中:

val代表节点的值

next指向下一个节点,是一个指针

删除链表的最后一个节点

删除操作

链表的删除操作比较简单,首先我们要找到要删除的节点的前一个节点,然后改变它的指针指向即可。对于删除最后一个节点,我们需要先找到最后一个节点的前一个节点。

具体的实现步骤如下:

首先判断链表是否为空,若为空则返回null

若链表中只有一个节点,则直接删除该节点

从头节点开始遍历,直到找到最后一个节点的前一个节点

将最后一个节点删除,即修改倒数第二个节点的指针

代码实现

下面是使用C++实现删除链表最后一个节点的代码:

ListNode* removeLastNode(ListNode* head) {

if (head == NULL) {

return NULL;

}

if (head->next == NULL) {

delete head;

return NULL;

}

ListNode *p = head;

while (p->next->next != NULL) {

p = p->next;

}

delete p->next;

p->next = NULL;

return head;

}

其中:

第1步:判断链表是否为空

if (head == NULL) {

return NULL;

}

第2步:判断链表中是否只有一个节点

if (head->next == NULL) {

delete head;

return NULL;

}

第3步:找到最后一个节点的前一个节点

ListNode *p = head;

while (p->next->next != NULL) {

p = p->next;

}

第4步:删除最后一个节点

delete p->next;

p->next = NULL;

总结

删除链表最后一个节点的操作比较简单,但是需要注意一些特殊情况,比如链表为空或只有一个节点。在操作链表时,要注意使用指针,因为链表本质上就是由节点之间的指针构成的。

后端开发标签