习题2-14:试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)。 示例: 输入:1->3->6->4->7 输出:5 用c语言
时间: 2024-12-11 11:17:20 浏览: 27
要实现习题2-14,在带头结点的单链表`L`上计算长度(即结点数),你可以编写如下的C语言函数:
```c
// 定义链表节点结构体
typedef struct ListNode {
int data;
struct ListNode* next;
} ListNode;
// 函数声明
int LENGTH(ListNode* L);
// LENGTH函数实现
int LENGTH(ListNode* L) {
if (L == NULL) { // 如果链表为空,返回0
return 0;
}
int length = 1; // 初始化长度为1,因为已知有头结点
ListNode* current = L->next; // 移动到第一个实际结点
while (current != NULL) { // 循环遍历链表
length++; // 每次遇到结点,长度加1
current = current->next; // 进一步移动到下一个结点
}
return length; // 返回链表的长度
}
```
这个函数通过遍历链表,从头结点开始,每次遇到非空结点就增加计数器`length`,直到遍历完整个链表。
相关问题
习题2-14:试写一算法在带头结点的单链表结构上实现线性表操作LENGTH(L)。 示例: 输入:1->3->6->4->7 输出:5
要编写一个在带头节点的单链表上实现线性表操作LENGTH(L)的算法,我们可以通过遍历链表来计算其长度。由于带头节点的存在,我们需要从第二个节点开始计数。
这里是一个Python实现该操作的算法:
```python
class Node:
def __init__(self, data=None):
self.data = data
self.next = None
def LENGTH(head):
if head is None or head.next is None: # 处理特殊情况:空链表或只有一个元素
return 0
current = head.next # 起始位置设为第二个节点
length = 1 # 初始化长度为1(因为第一个节点)
while current.next is not head: # 遍历直到回到头部
length += 1
current = current.next
return length # 返回链表长度
# 示例:
head = Node(1)
head.next = Node(3)
head.next.next = Node(6)
head.next.next.next = Node(4)
head.next.next.next.next = Node(7)
length = LENGTH(head)
print(f"Length of the linked list: {length}") # 输出:5
```
试写一算法在带头结点的单链表结构上实现线性表操作Length(L)。
可以使用遍历链表的方式,从头结点开始,依次遍历每个节点,每遍历一个节点,计数器加1,直到遍历到链表的末尾节点,最后返回计数器的值即可。具体实现可以参考以下代码:
int Length(LinkList L)
{
int len = 0;
LNode *p = L->next; // 从第一个节点开始遍历
while (p != NULL)
{
len++;
p = p->next;
}
return len;
}
阅读全文