📅  最后修改于: 2023-12-03 15:26:03.799000             🧑  作者: Mango
本次问题是关于链表的。
链表是一种常见的数据结构,用于存储一系列数据元素。每个元素由一个值和一个指针组成,指针指向下一个元素。链表的尾元素的指针为空,表示该元素是链表的末尾。
链表分为单向链表和双向链表两种类型。单向链表中每个元素的指针只指向下一个元素,而双向链表中每个元素的指针既可以指向下一个元素,也可以指向前一个元素。
考虑一个单向链表,其中存储了一组整数。请给出一个函数,该函数接收一个整数 n
作为参数,将链表中所有大于 n
的元素删除,并返回链表的头指针。如果链表为空,则应返回空指针。
该函数的实现如下所示:
node* remove_greater_than_n(node* head, int n) {
node* cur = head;
node* prev = nullptr;
while(cur != nullptr) {
if(cur->data > n) {
if(cur == head) {
head = cur->next;
} else {
prev->next = cur->next;
}
delete cur;
cur = prev == nullptr ? head : prev->next;
} else {
prev = cur;
cur = cur->next;
}
}
return head;
}
该函数接收一个指向链表头的指针 head
和一个整数 n
,并遍历整个链表,删除所有大于 n
的元素。在删除元素时,需要更新链表的头指针(如果需要)。最后,返回更新后的链表头指针。
使用该函数的方法如下:
node* head = create_list(...);
head = remove_greater_than_n(head, n);
其中,create_list
函数用于创建链表。在第二行中,我们重新给 head
赋值,将其更新为删除操作后的头指针。
本文介绍了链表数据结构以及如何删除其中所有大于 n
的元素。链表是一种重要的数据结构,在构建各种算法和数据结构时非常有用。熟练掌握链表的操作是程序员的基本功之一。