c语言实现头插法创建链表及链表遍历和逆置

    科技2023-12-22  96

    从键盘输入一个正整数N(1到100),之后输入N个字符并用头插法(先输入的数据在链表的尾部)创建链表,然后遍历该链表,最后对链表进行逆置并遍历。

    要求:

    1)写一个主函数 2)写一个函数创建链表 3)写一个函数遍历链表 4)写一个函数逆置链表

    运行示例:

    请输入字符个数: 5 请输入第1个字符:a 请输入第2个字符:b 请输入第3个字符:c 请输入第4个字符:d 请输入第5个字符:e 链表创建成功,对其遍历 edcba 链表逆置之后,对其遍历 abcde

    程序代码

    #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <string.h> typedef struct Node { char data; // 存储链表数据 struct Node *next; // 存储结点的地址 }Node,*Linklist; void Illustrate(Linklist head) { Linklist tem = head; // 将头指针的地址赋给临时的指针 while (tem->next != NULL) { // 指向最后一个结点的指针域时会停止 tem = tem->next; // 结点不断向后移动 printf("%c", tem->data); } } Node *Inverse(Node *L) { Node *p, *q; p = L->next; L->next = NULL; while (p != NULL) { q = p; p = p->next; q->next = L->next; L->next = q; } return L; } Linklist Creat_list(Linklist head) { head = (Linklist)malloc(sizeof(Node)); // 为头指针开辟内存空间 Node *node = NULL; // 定义新结点 int count = 0,i; // 创建结点的个数 head->next = NULL; node = head->next; // 将最后一个结点的指针域永远保持为NULL printf("请输入字符个数:\n"); scanf("%d", &count); for (i = 0; i < count; i++) { node = (Linklist)malloc(sizeof(Node)); // 为新结点开辟内存空间 printf("请输入第%d个字符:",i+1); char t; rewind(stdin); scanf("%c",&t); node->data = t; // 为新结点的数据域赋值 node->next = head->next; // 将头指针所指向的下一个结点的地址,赋给新创建结点的next head->next = node; // 将新创建的结点的地址赋给头指针的下一个结点 } printf("\n"); return head; } int main() { Linklist head = NULL; // 链表的头指针 head = Creat_list(head); // 创建链表 printf("链表创建成功,对其遍历\n"); Illustrate(head); // 输出每个结点的数据域 Inverse(head); printf("\n链表逆置之后,对其遍历\n"); Illustrate(head); return 0; }

    运行结果

    Processed: 0.030, SQL: 8