📌  相关文章
📜  数据结构示例-创建n个节点的循环链表并反序打印(1)

📅  最后修改于: 2023-12-03 15:40:01.765000             🧑  作者: Mango

数据结构示例-创建n个节点的循环链表并反序打印

介绍

循环链表是链表的一种,它和链表的区别在于它的最后一个节点指向头节点,形成一个环状结构。本示例演示创建一个由n个节点组成的循环链表,并反序打印节点的值。

程序实现
首先定义一个循环链表节点的结构体
typedef struct node{
    int data;
    struct node *next;
}Node;

创建一个n个节点的循环链表函数
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个节点组成的循环链表。创建循环链表需要注意将最后一个节点指向头节点。反序打印需要将原链表断开,并构建一条新的链表使其指向逆序排列。