C语言试题描述 先将键盘输入的一组整数依次存入循环链表(尾插法),然后删除头部第一个元素,最后将其余元素逆序输出。 样例输入 4 2 8 6 9 样例输出 9 8 6 2
时间: 2025-01-05 08:40:46 浏览: 8
在C语言中,这个任务涉及的主要步骤包括:
1. **创建循环链表**:首先,你需要定义一个结构体表示链表节点,包含整数值和指向下一个节点的指针。然后,你可以创建一个循环链表的头节点,并使用while循环从用户输入获取整数,不断添加到链表的末尾。
```c
typedef struct ListNode {
int value;
struct ListNode* next;
} ListNode;
ListNode* createList() {
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->value = -1; // 设置一个特殊的值作为头节点的标识
head->next = head;
ListNode* current = head;
int num;
scanf("%d", &num);
while (num != -1) {
current->next = (ListNode*)malloc(sizeof(ListNode));
current->next->value = num;
current->next->next = head;
current = current->next;
scanf("%d", &num);
}
return head;
}
```
2. **删除头部元素**:由于这是一个循环链表,删除头部元素需要特殊处理。可以修改头节点的next指向前一个节点,然后释放已删除节点的内存。
```c
void deleteHead(ListNode* head) {
if (head->value == -1) { // 如果链表为空或只有一个节点
free(head);
head = NULL;
} else {
ListNode* temp = head->next;
free(head);
head = temp;
}
}
```
3. **逆序输出**:遍历链表并逐个打印元素,因为链表已经变为循环,所以我们可以简单地从前向后移动直到找到头节点,然后开始反向遍历。
```c
void printReverse(ListNode* head) {
ListNode* prev = NULL;
ListNode* curr = head;
while (curr != head) {
printf("%d ", curr->value); // 打印当前节点值
prev = curr;
curr = curr->next;
}
printf("%d\n", prev->value); // 输出最后一个元素
}
```
阅读全文