什么是链表?
链表是一种非常常见的数据结构,它由一些节点组成。每个节点都指向下一个节点,这样就形成了一个链式结构。链表非常适合插入删除操作,但是不适合随机访问,因为它的访问时间复杂度是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;
总结
删除链表最后一个节点的操作比较简单,但是需要注意一些特殊情况,比如链表为空或只有一个节点。在操作链表时,要注意使用指针,因为链表本质上就是由节点之间的指针构成的。