1 题目
功能:创建一个单循环链表 描述:输入链表中各个结点中的值,然后进行进行整合成单循环链表进行输出
2 思路
一个循环链表是从简单的链表中发展而来,简单链表带来的弊端是,必须要保存头结点才能不断的遍历链表,否则当遍历到 结点尾部的时候,便没办法进行后续的工作。 简单循环链表带来的优势是,当遍历到链表尾部的时候,由于尾部的next指针指向头部,所以是要比简单的单链表灵活一些的
3 代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**
功能:创建一个单循环链表
描述:输入链表中各个结点中的值,然后进行进行整合成单循环链表进行输出
**/
typedef struct Node {
char num;
struct Node *next;
} LNode, *LinkList;
LinkList create(void) {
LinkList head;
LNode *p1, *p2;
char a;
head = NULL;
a = getchar();
while (a != '#') {
p1 = (LNode*)malloc(sizeof(LNode)); // 分配空间
p1->num = a; // 数据域赋值
if (head == NULL)
head = p1;
else
p2->next = p1;
p2 = p1;
a = getchar();
}
p2->next = head; // 尾节点指向头结点
return head;
}
int main(int argc, char const *argv[]) {
LinkList L1, head;
printf("请输入循环链表:(以 # 结束)\n");
L1 = create(); // 创建循环链表
head = L1;
printf("形成的循环链表是:\n");
printf("%c -> ", L1->num);
L1 = L1->next; // 指向下一个结点
while (L1 != head) { // 判断条件为循环到头结点结束
printf("%c -> ", L1->num);
L1 = L1->next;
}
printf("\n");
}
示例结果:
$ gcc ex072.c -o demo
$ ./demo
请输入循环链表:(以 # 结束)
apple#
形成的循环链表是:
a -> p -> p -> l -> e ->