C程序以找到链表的长度

概述

链表是常见的一种数据结构,其结点之间通过指针相连,每个结点包含了数据和指向下一个结点的指针。链表长度是指链表中结点的个数,我们可以通过循环遍历链表,并统计链表中结点的个数来得到链表的长度。

遍历链表

遍历链表的过程就是访问链表中的每个结点,我们可以使用循环来实现。通常,我们定义一个指针指向链表的头结点,然后循环访问链表中的每个结点,直到遇到空结点为止。

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缓存的淘汰策略,也可以使用链表来解决字符串反转等问题。

总结

本文介绍了如何使用循环遍历链表来得到链表的长度,同时也介绍了链表的一些应用场景。链表虽然不如数组使用广泛,但在某些情况下,它的高效性和灵活性却是不可替代的。

后端开发标签