已知h是指向单向加头链表的首指针,p指向一个新结点,删除表头结点的操作是。 A. p=h, h=p->next; free(p); B. p=h->next; free(p); h=h->next; C. p=h->next, h->next=p->next; free(p); D. free(h->next); h=h->next;
时间: 2024-04-16 18:25:12 浏览: 277
A. p=h, h=p->next; free(p);
这个操作是删除单向链表的表头结点的常见做法。首先,将p指针指向链表的首节点h。然后,将h指针指向下一个结点,即h=p->next。最后,释放原来的表头结点p,即free(p)。这样就成功删除了表头结点,并更新了链表的首指针h。所以选项A是正确的答案。
相关问题
c语言已知head指向一个带头结点的单向链表,链表中每个结点包含数据域(data)和指针域(next)。请编写函数实现链表的逆置。
```
void reverseList(Node *head) {
Node *prev = NULL;
Node *curr = head->next;
while (curr) {
Node *next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head->next = prev;
}
```
其中,head为带头结点的单向链表头指针。首先定义prev和curr两个指针,分别指向前一个结点和当前结点。然后依次遍历链表,将当前结点的next指针指向前一个结点,然后将prev和curr向后移动,直到遍历完整个链表。最后将头指针的next指向反转后的链表的头结点。
已知head 指向一个带头结点的单向链表,链表中每个节点包含字符型数据long 和和指向本结构节点的指针,编写程序实现如下图所示的逆置
假设链表头结点为head,可以按照如下步骤逆置链表:
1. 定义三个指针:pre、p、next,分别指向当前节点的前一个节点、当前节点、当前节点的下一个节点。
2. 将p指针指向头结点的下一个节点,pre指向头结点。
3. 循环遍历链表,每次将p指针所指节点的next指针指向pre节点,然后将pre、p、next三个指针向后移动一个节点,直到p指针指向NULL。
4. 最后将头结点的next指针指向pre节点,完成链表的逆置。
具体代码实现如下:
```c
void reverseList(Node* head) {
if (head == NULL || head->next == NULL) {
return; // 链表为空或者只有一个节点,无需逆置
}
Node *pre = head, *p = head->next, *next; // 定义三个指针
pre->next = NULL; // 头结点的next指针置为NULL
while (p != NULL) {
next = p->next; // 先保存p节点的下一个节点
p->next = pre; // 将p节点的next指针指向pre节点
pre = p; // pre、p、next三个指针向后移动一个节点
p = next;
}
head->next = pre; // 将头结点的next指针指向pre节点
}
```
阅读全文