自学内容网 自学内容网

C语言编译循环链表

#include <stdio.h>
#include <stdlib.h>

// 定义链表节点结构
struct Node {
    int data;
    struct Node* next;
};

// 创建循环链表
struct Node* createCircularLinkedList(int n) {
    struct Node* head = NULL;
    struct Node* temp = NULL;
    struct Node* ptr = NULL;
    int i;

    for(i=0; i<n; i++) {
        // 为节点分配内存空间
        temp = (struct Node*)malloc(sizeof(struct Node));
        printf("输入节点%d的数据:", i+1);
        scanf("%d", &temp->data);
        temp->next = NULL;

        if(head == NULL) {
            // 如果是第一个节点
            head = temp;
            ptr = temp;
        } else {
            // 如果不是第一个节点,则将新节点连接到头节点
            ptr->next = temp;
            ptr = temp;
        }
    }

    // 最后将最后一个节点的next指向头节点,形成循环
    ptr->next = head;

    return head;
}

// 遍历循环链表
void displayCircularLinkedList(struct Node* head) {
    struct Node* current = head;

    if(head == NULL) {
        printf("链表为空!");
        return;
    }

    do {
        printf("%d -> ", current->data);
        current = current->next;
    } while(current != head);

    printf("循环链表尾节点的next指向了头节点");
}

int main() {
    int n;
    struct Node* head = NULL;

    printf("输入链表中节点的数量:");
    scanf("%d", &n);

    head = createCircularLinkedList(n);

    printf("循环链表为:\n");
    displayCircularLinkedList(head);

    return 0;
}
 

使用这段代码,你可以在运行时输入节点数和节点数据,来创建和展示一个循环链表。请注意,在创建循环链表时,我们通过将最后一个节点的next指针指向头节点来实现循环的连接。在遍历循环链表时,我们使用了do-while循环,确保至少执行一次以遍历所有节点。


原文地址:https://blog.csdn.net/caoxinri123/article/details/136805188

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!