C语言先将键盘输入的一组整数依次存入循环链表(尾插法),然后删除头部第一个元素,最后将其余元素逆序输出。 样例输入 4 2 8 6 9 样例输出 9 8 6 2
时间: 2025-01-04 19:37:49 浏览: 9
在C语言中,你可以通过以下几个步骤实现这个功能:
1. **创建循环链表结构**:
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
```
2. **初始化循环链表**:
首先,你需要创建一个头结点,并手动设置它的`next`指向它自己,以便形成循环。
3. **输入整数并插入链表**:
遍历输入的整数,每次读取一个值就创建一个新的节点,并将该节点的`data`设为输入的数值,`next`指向当前最后一个节点。这样可以实现尾插法。
```c
Node* insert(Node* head, int num) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = num;
newNode->next = head;
if (head == NULL) {
head = newNode; // 链表为空,直接设置为新节点
} else {
while (head->next != head) {
head = head->next;
}
head->next = newNode; // 关联到形成环
}
return head;
}
```
4. **删除头部元素**:
如果需要删除头部元素,只需要改变头结点的`next`指向第二个元素即可。
5. **逆序输出链表**:
从链表的最后一个节点开始向前遍历,同时更新临时指针指向下一个节点,直到遇到第一个节点。
```c
void reversePrint(Node* node) {
Node* temp = NULL;
while (node != NULL) {
temp = node->next;
printf("%d ", node->data);
node->next = temp->prev; // 更新节点的next指向
if (temp == head) { // 如果到达了原来的头结点,则结束循环
break;
}
temp->prev = node; // 保持临时节点的前驱
node = temp;
}
}
```
6. **完整示例**:
```c
int main() {
Node* head = NULL;
int nums[] = {4, 2, 8, 6, 9};
int n = sizeof(nums)/sizeof(nums[0]);
for (int i = 0; i < n; i++) {
head = insert(head, nums[i]);
}
// 删除头部元素
if (head->next != head) {
head = head->next;
}
reversePrint(head);
return 0;
}
```
样例输入和输出对应的过程会在上述代码中完成。注意:在实际操作中,你需要处理输入数据的边界情况,例如用户输入非数字字符或者数组越界等。
阅读全文