双向链表删除最后一个节点
时间: 2023-12-14 22:38:01 浏览: 102
数据结构 链表节点的删除
双向链表删除最后一个节点的操作如下:
1. 判断链表是否为空,如果为空则无法进行删除操作,直接返回。
2. 判断链表是否只有一个节点,如果是则将头节点和尾节点都指向NULL,释放最后一个节点的内存,然后返回。
3. 如果链表不止一个节点,那么先找到尾节点的前一个节点,即倒数第二个节点,可以通过循环遍历或者直接使用尾节点的prev指针来找到。
4. 将倒数第二个节点的next指针指向NULL,然后释放尾节点的内存即可。
下面是C++代码实现:
```c++
struct ListNode {
int val;
ListNode *prev;
ListNode *next;
ListNode(int x) : val(x), prev(NULL), next(NULL) {}
};
void deleteLastNode(ListNode* &head, ListNode* &tail) {
if (head == NULL) {
return;
}
if (head == tail) {
delete head;
head = NULL;
tail = NULL;
return;
}
ListNode *p = tail->prev;
p->next = NULL;
delete tail;
tail = p;
return;
}
```
阅读全文