int ListLength(LinkList L) { LinkList p=L-›next; int i=0; while(p != NULL) { 1+= 1;/*visit(p); 访问节点p*/ p=p-›next; } return i; }改为不带头结点的
时间: 2024-09-24 17:10:38 浏览: 54
数据结构与算法-linklist逆转
这是原函数`ListLength`,它用于计算一个已知头结点的单向链接列表的长度。然而,由于题目要求处理无头结点的情况,我们可以修改该函数。下面是修改后的版本:
```c
int ListLengthWithoutHeader(LinkList L) {
if (L == NULL || L->next == NULL) { // 验证链表是否为空或只有一个节点
return 0;
}
LinkList p = L->next; // 起始指针设为第二个节点
int length = 0; // 初始化长度计数器
while (p != NULL) { // 循环检查直到链表结束
length++; // 每次迭代加一表示访问了一个节点
p = p->next; // 移动到下一个节点
}
return length; // 返回链表的长度
}
```
在这个版本中,我们首先检查`L`是否为空或只有一个节点(即头结点),如果是,则链表长度为0。然后,我们从第二个节点开始遍历,并在每次循环中增加`length`值。注意,这里已经移除了原来的`visit(p)`部分,因为我们不需要访问节点,只关心节点的数量。
阅读全文