📅  最后修改于: 2023-12-03 15:40:01.765000             🧑  作者: Mango
循环链表是链表的一种,它和链表的区别在于它的最后一个节点指向头节点,形成一个环状结构。本示例演示创建一个由n个节点组成的循环链表,并反序打印节点的值。
typedef struct node{
int data;
struct node *next;
}Node;
Node* createCircularLinkedList(int n){
Node *head=NULL, *p=NULL, *q=NULL;
for(int i =1 ;i<=n;i++){
p=(Node*)malloc(sizeof(Node));
printf("请输入第%d个节点的值:",i);
scanf("%d",&(p->data));
if(head==NULL){
head=p;
}else{
q->next=p;
}
q=p;
}
q->next=head;
return head;
}
void reversePrint(Node* head){
Node* p=head, *q=head->next;
head->next=NULL;
while(q!=head){
Node* temp=q->next;
q->next=p;
p=q;
q=temp;
}
printf("链表反序打印:");
printf("%d ", p->data);
for(Node* i=p->next;i!=NULL && i!=p;i=i->next){
printf("%d ",i->data);
}
printf("\n");
p->next=head;
return;
}
int main(){
int n;
printf("请输入链表的节点数:");
scanf("%d",&n);
Node* head=createCircularLinkedList(n);
reversePrint(head);
return 0;
}
本示例演示了如何创建并打印一个由n个节点组成的循环链表。创建循环链表需要注意将最后一个节点指向头节点。反序打印需要将原链表断开,并构建一条新的链表使其指向逆序排列。