求单链表长度代码C语言
时间: 2023-08-18 17:15:43 浏览: 97
下面是一个单链表长度的C语言示例代码:
```c
/* 单链表节点结构体定义 */
struct ListNode {
int val;
struct ListNode *next;
};
int getLinkedListLength(struct ListNode* head) {
int count = 0;
struct ListNode* curr = head;
while (curr != NULL) {
count++;
curr = curr->next;
}
return count;
}
```
该函数接收单链表的头节点 `head`,并返回链表的长度。函数内部通过遍历链表,使用一个计数器变量 `count` 统计链表中节点的个数,最后返回计数器的值即可。
相关问题
查找单链表元素的C语言代码
以下是查找单链表元素的C语言代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
/* 定义单链表的节点结构体 */
struct ListNode {
int val;
struct ListNode *next;
};
/* 创建单链表 */
struct ListNode *createList(int *arr, int n) {
struct ListNode *head = NULL;
struct ListNode *tail = NULL;
for (int i = 0; i < n; i++) {
struct ListNode *node = (struct ListNode *)malloc(sizeof(struct ListNode));
node->val = arr[i];
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
/* 查找单链表中是否存在指定元素 */
int searchList(struct ListNode *head, int target) {
while (head != NULL) {
if (head->val == target) {
return 1;
}
head = head->next;
}
return 0;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(int);
struct ListNode *head = createList(arr, n);
int target = 3;
int found = searchList(head, target);
printf("%d\n", found);
return 0;
}
```
该代码中,首先定义了单链表的节点结构体`struct ListNode`,包括一个`val`表示节点值和一个`next`指针表示下一个节点的地址。接着,创建了一个`createList`函数,用于创建单链表。该函数接受一个整型数组和数组长度,依次将数组中的元素加入到单链表中。最后,定义了一个`searchList`函数,用于查找单链表中是否存在指定元素。在函数中,使用`while`循环遍历单链表,若找到目标元素则返回1,否则返回0。在`main`函数中,首先创建一个整型数组并通过`createList`函数创建单链表,然后将目标元素设为3,并将`head`和`target`传入`searchList`函数中。最后,输出查找结果。
单链表数据元素为字符型,怎么求单链表的长度,c语言
在C语言中,求解字符型单链表的长度通常需要遍历整个链表,因为链表并没有内置的属性可以直接获取长度。以下是简单的步骤:
1. 定义一个指针`p`初始化为空,表示当前节点。
2. 使用一个计数变量`length`初始化为0,用于存储链表长度。
3. 使用一个循环,从头结点开始遍历:
- 检查`p`是否为NULL(链表结束),如果是,则链表已空,返回`length`作为长度。
- 否则,将`length`加一,并将`p`指向下一个节点(即`p = p->next`)。
4. 循环结束后,`length`就是链表的实际长度。
示例代码如下:
```c
#include <stdio.h>
typedef struct Node {
char data;
struct Node* next;
} CharListNode;
int getLinkedListLength(CharListNode* head) {
if (head == NULL) {
return 0; // 链表为空
}
int length = 0;
CharListNode* p = head;
while (p != NULL) {
length++;
p = p->next;
}
return length;
}
// 添加节点、创建链表等其他操作(这部分未提供)
```
阅读全文