建立一个字母单链表并输出到屏幕上,插入一个字母 i 到 字母 n 之后
时间: 2024-05-03 10:16:20 浏览: 98
建立一个单链表
好的,这是一个简单的单链表操作,我来给你讲一下。
首先,我们需要定义一个单链表的结构体,包含一个值域和一个指向下一个节点的指针:
```c
typedef struct node {
char data;
struct node* next;
} Node;
```
接着,我们可以编写一个函数来创建一个单链表,函数的参数是一个字符串,每个字符都会被插入到单链表的末尾:
```c
Node* createList(const char* str) {
Node* head = NULL;
Node* tail = NULL;
while (*str) {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = *str;
new_node->next = NULL;
if (tail == NULL) {
head = new_node;
tail = new_node;
} else {
tail->next = new_node;
tail = new_node;
}
str++;
}
return head;
}
```
这个函数会遍历字符串中的每一个字符,创建一个新的节点,并将其插入到单链表的末尾。如果链表为空,那么新节点既是头节点也是尾节点;否则,我们需要将新节点插入到尾节点的后面,并更新尾节点。最后,我们返回头节点。
接下来,我们需要编写一个函数来插入一个新的节点到字母 n 之后。这个函数的参数是头节点和要插入的字符:
```c
void insertAfterN(Node* head, char c) {
Node* p = head;
while (p != NULL) {
if (p->data == 'n') {
Node* new_node = (Node*)malloc(sizeof(Node));
new_node->data = c;
new_node->next = p->next;
p->next = new_node;
break;
}
p = p->next;
}
}
```
这个函数会遍历单链表,找到第一个值为字母 n 的节点,并在它的后面插入一个新节点。我们先从头节点开始遍历,如果当前节点的值为字母 n,那么就创建一个新节点,并将其插入到当前节点的后面。最后,我们退出循环即可。
最后,我们可以编写一个函数来输出单链表的所有节点的值:
```c
void printList(Node* head) {
Node* p = head;
while (p != NULL) {
printf("%c ", p->data);
p = p->next;
}
printf("\n");
}
```
这个函数会遍历单链表的所有节点,并将它们的值输出到屏幕上。
现在,我们可以将上面的函数组合起来,来完成我们的任务:
```c
int main() {
Node* head = createList("abcdefghijklmno");
printf("Original list: ");
printList(head);
insertAfterN(head, 'i');
printf("Modified list: ");
printList(head);
return 0;
}
```
这个程序会创建一个包含字母 a 到字母 o 的单链表,然后输出它的值。接着,它会在字母 n 的后面插入一个新的节点,包含字母 i,然后再次输出单链表的值。
阅读全文