代码生成一个算法将一个字符串s中数字符依次构造一个单链表H
时间: 2023-03-28 14:01:36 浏览: 136
可以回答这个问题。算法如下:
1. 定义一个指针p指向链表头节点H,初始时H为NULL。
2. 从字符串s的第一个字符开始遍历,如果是数字字符,则新建一个节点,并将该字符转换为数字存储在节点中。
3. 将新建的节点插入到链表中,插入的位置为使得链表中的节点按照数字从小到大排列。
4. 遍历完字符串s后,返回链表头节点H。
代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int val;
struct node *next;
} Node;
Node *insert(Node *head, int val) {
Node *p = head;
Node *new_node = (Node *)malloc(sizeof(Node));
new_node->val = val;
new_node->next = NULL;
if (head == NULL) {
head = new_node;
} else if (val < head->val) {
new_node->next = head;
head = new_node;
} else {
while (p->next != NULL && p->next->val < val) {
p = p->next;
}
new_node->next = p->next;
p->next = new_node;
}
return head;
}
Node *construct_list(char *s) {
Node *head = NULL;
for (int i = ; s[i] != '\'; i++) {
if (s[i] >= '' && s[i] <= '9') {
int val = s[i] - '';
head = insert(head, val);
}
}
return head;
}
void print_list(Node *head) {
Node *p = head;
while (p != NULL) {
printf("%d ", p->val);
p = p->next;
}
printf("\n");
}
int main() {
char s[] = "a1b2c3d4e5f6";
Node *head = construct_list(s);
print_list(head);
return ;
}
```
阅读全文