C++语言有一带表头结点的单链表,L为单链表的头指针,试编写一算法查找数据域为x的结点,并返回其符合条件的结点个数。int n=0; int count ( LinkList L, int x) { //请补充语句,完成此函数功能
时间: 2024-06-03 20:07:52 浏览: 15
int n=0;
LinkList p = L->next; //从第一个结点开始查找
while(p != NULL){ //遍历整个链表
if(p->data == x){ //如果找到数据域为x的结点
n++; //计数器加1
}
p = p->next; //指针后移
}
return n; //返回符合条件的结点个数
相关问题
完成代码C++语言有一带表头结点的单链表,L为单链表的头指针,试编写一算法查找数据域为x的结点,并返回其符合条件的结点个数。int n=0; int count ( LinkList L, int x) { //请补充语句,完成此函数功能
int n=0;
int count ( LinkList L, int x) {
LNode* p = L->next;
while(p != NULL){
if(p->data == x){
n++;
}
p = p->next;
}
return n;
}
试写一个算法,在带头结点的单链表L中删除所有的数据元素为x的结点
算法如下:
1. 遍历链表L,找到所有数据元素为x的结点p和其前驱结点pre。
2. 将pre的next指针指向p的next指针(即跳过p结点)。
3. 删除p结点。
4. 重复1、2、3直到所有数据元素为x的结点都被删除。
5. 返回修改后的链表L。
C++代码实现如下:
```c++
void deleteNode(ListNode* L, int x) {
ListNode* p = L->next;
ListNode* pre = L;
while (p != NULL) {
if (p->data == x) {
pre->next = p->next;
ListNode* tmp = p;
p = p->next;
delete tmp;
} else {
pre = p;
p = p->next;
}
}
}
```