单链表指针指向尾结点重新指向头结点
时间: 2024-12-10 12:19:13 浏览: 12
在单链表中,指针指向尾结点重新指向头结点的操作通常用于实现循环链表。循环链表是一种特殊的单链表,其中最后一个结点的指针不是指向空,而是指向头结点。这样做的目的是为了方便遍历链表,可以从任意一个结点开始遍历整个链表。
具体操作步骤如下:
1. **定义链表结点结构**:首先定义一个链表结点的结构体,包含数据域和指针域。
2. **创建链表**:创建一个单链表,并确保最后一个结点的指针指向空。
3. **修改指针**:将最后一个结点的指针从指向空改为指向头结点。
下面是一个示例代码,演示如何将单链表的尾结点指针重新指向头结点:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新结点
Node* createNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("内存分配失败\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
return newNode;
}
// 将尾结点指向头结点
void makeCircular(Node* head) {
if (!head) return; // 如果链表为空,直接返回
Node* temp = head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = head; // 将尾结点指向头结点
}
// 打印链表
void printList(Node* head) {
if (!head) return;
Node* temp = head;
do {
printf("%d -> ", temp->data);
temp = temp->next;
} while (temp != head);
printf("...\n");
}
int main() {
// 创建单链表
Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
printf("原链表: ");
printList(head);
// 将尾结点指向头结点
makeCircular(head);
printf("循环链表: ");
printList(head);
return 0;
}
```
在这个示例中,`makeCircular` 函数将单链表的尾结点指针重新指向头结点,从而实现循环链表。
阅读全文