概述
链表是常见的一种数据结构,其结点之间通过指针相连,每个结点包含了数据和指向下一个结点的指针。链表长度是指链表中结点的个数,我们可以通过循环遍历链表,并统计链表中结点的个数来得到链表的长度。
遍历链表
遍历链表的过程就是访问链表中的每个结点,我们可以使用循环来实现。通常,我们定义一个指针指向链表的头结点,然后循环访问链表中的每个结点,直到遇到空结点为止。
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
int getLength(ListNode* head) {
int length = 0;
ListNode* cur = head;
while (cur) {
length++;
cur = cur->next;
}
return length;
}
在上述代码中,getLength函数接受一个链表的头结点指针参数head,返回链表的长度。我们定义了一个整型变量length,用来保存链表的长度,初始值为0。然后定义了一个指针cur,用来遍历链表,初始值为head。在while循环中,我们不断遍历链表中的每个结点,直到cur指向空结点为止。每遍历到一个结点,就将length加1,并将cur指向下一个结点。最后,函数返回计数器length,即为链表的长度。
测试
为了测试getLength函数的正确性,我们可以构造一些测试用例。例如,对于如下链表:
ListNode* head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
通过调用getLength函数,应该可以得到链表的长度为4。
int len = getLength(head);
cout << len << endl; // 输出4
应用
在实际的编程中,经常需要使用链表来解决某些问题。
当数据量不确定时,使用链表可以减少内存的浪费。
当需要频繁地插入和删除数据时,链表比数组更加高效。
当需要遍历数据时,链表的遍历比数组的遍历更加方便。
例如,我们可以使用链表来实现LRU缓存的淘汰策略,也可以使用链表来解决字符串反转等问题。
总结
本文介绍了如何使用循环遍历链表来得到链表的长度,同时也介绍了链表的一些应用场景。链表虽然不如数组使用广泛,但在某些情况下,它的高效性和灵活性却是不可替代的。