打印带头结点的循环单链表调用方法C语言
时间: 2024-10-08 15:06:31 浏览: 34
在 C 语言中,打印带头结点的循环单链表通常需要通过遍历链表的方式来实现。这里有一个简单的示例,假设我们有一个名为 `ListNode` 的结构体表示链表节点,其中包含 `data` 存储数据,`next` 指向下一个节点:
```c
typedef struct ListNode {
int data;
struct ListNode *next;
} ListNode;
// 创建循环链表
void createCircularLinkedList(ListNode **head, int *data, int size) {
ListNode *temp = (ListNode *)malloc(sizeof(ListNode));
temp->data = data[0];
temp->next = temp; // 设置头结点指向自身创建循环
for (int i = 1; i < size; i++) {
ListNode *newNode = (ListNode *)malloc(sizeof(ListNode));
newNode->data = data[i];
newNode->next = temp->next; // 新节点的 next 指向前一个节点的 next
temp->next = newNode;
if (i == size - 1) { // 如果最后一个节点,也链接回头结点
temp->next = head;
}
}
}
// 打印循环链表
void printCircularLinkedList(ListNode *head) {
ListNode *current = head;
do {
printf("%d ", current->data);
current = current->next;
} while (current != head); // 循环直到回到头结点
printf("\n");
}
// 示例
int main() {
int data[] = {1, 2, 3, 4, 5};
ListNode *head = NULL;
createCircularLinkedList(&head, data, sizeof(data) / sizeof(data[0]));
printCircularLinkedList(head);
return 0;
}
```
这个程序首先创建了一个循环链表,然后通过 `printCircularLinkedList` 函数打印出链表中的所有元素。`do...while` 循环保证了无论链表是否循环,都能正确地结束。
阅读全文