删除链表时把头结点也删掉怎么办
时间: 2023-05-12 14:05:36 浏览: 75
如果要删除链表中的头结点,需要先将头结点的下一个节点作为新的头结点,然后再删除原来的头结点。具体实现可以参考以下代码:
```c
void deleteHeadNode(struct ListNode** head) {
if (*head == NULL) {
return;
}
struct ListNode* temp = *head;
*head = (*head)->next;
free(temp);
}
```
这个函数接受一个指向头结点指针的指针,如果链表为空则直接返回,否则将头结点的下一个节点作为新的头结点,然后释放原来的头结点。
相关问题
如何删除双向链表的头结点
删除双向链表的头结点需要进行以下步骤:
1. 判断链表是否为空,如果为空则直接返回。
2. 将头结点的下一个节点作为新的头结点,并将新的头结点的前驱节点指针置为NULL。
3. 释放原来的头结点。
以下是C++代码实现:
```c++
void deleteHead(ListNode*& head) {
if (head == NULL) {
return;
}
ListNode* newHead = head->next;
if (newHead != NULL) {
newHead->prev = NULL;
}
delete head;
head = newHead;
}
```
删除循环链表中结点s的前驱结点
由于循环链表中每个结点都有前驱结点,因此删除结点s的前驱结点需要考虑两种情况。
情况一:当s是链表的第一个结点时,需要删除的是链表的最后一个结点,即链表中的尾结点。此时,需要先找到链表的尾结点,然后将其指向s的后继结点,即可完成删除操作。
情况二:当s不是链表的第一个结点时,只需将s的前驱结点的指针指向s的后继结点即可完成删除操作。
具体实现代码如下:
```
if(s == head) { //情况一
ListNode *tail = head;
while(tail->next != head) {
tail = tail->next;
}
tail->next = s->next;
} else { //情况二
ListNode *pre = head, *cur = head->next;
while(cur != s) {
pre = cur;
cur = cur->next;
}
pre->next = cur->next;
}
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)