代码生成一个算法将一个字符串s中数字符依次构造一个单链表H
时间: 2024-03-22 09:40:05 浏览: 54
好的,以下是生成单链表的算法实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct ListNode {
int val;
struct ListNode *next;
};
struct ListNode* createList(char* s) {
int len = strlen(s);
struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));
head->next = NULL;
struct ListNode* tail = head;
for (int i = 0; i < len; i++) {
if (s[i] >= '0' && s[i] <= '9') {
struct ListNode* node = (struct ListNode*)malloc(sizeof(struct ListNode));
node->val = s[i] - '0';
node->next = NULL;
tail->next = node;
tail = node;
}
}
struct ListNode* res = head->next;
free(head);
return res;
}
int main() {
char s[] = "a1b2c3";
struct ListNode* head = createList(s);
while (head) {
printf("%d ", head->val);
head = head->next;
}
return 0;
}
```
解释一下算法实现过程:
1. 首先声明单链表的结构体 `struct ListNode`,包括节点值 `val` 和指向下一个节点的指针 `next`。
2. 创建 `createList` 函数,参数为要生成单链表的字符串 `s`。
3. 获取字符串的长度 `len`,并创建一个头节点 `head`,初始化它的指向下一个节点的指针 `next` 为 `NULL`。
4. 创建一个尾节点指针 `tail`,初始化为头节点。遍历字符串中的每个字符,如果是数字字符,则创建新的节点 `node`,将节点值赋为该数字字符对应的整数值,并将新节点接在尾节点后面,更新尾节点指针 `tail` 为新节点。
5. 最后返回链表的头节点指针 `head->next`,并释放头节点占用的内存。
6. 在主函数中调用 `createList` 函数生成链表,并遍历输出每个节点的值。
希望对你有所帮助!
阅读全文