当前位置:实例文章 » 其他实例» [文章]每日一题——反转链表

每日一题——反转链表

发布人:shili8 发布时间:2025-02-12 07:22 阅读次数:0

**每日一题——反转链表**

在数据结构中,链表是一种常见的数据结构,它通过指针连接多个节点。链表可以用于实现各种数据结构,如栈、队列等。在某些情况下,我们需要反转链表,这意味着将原来的链表中的元素反转过来。

**反转链表的定义**

反转链表是指将原来的链表中的元素反转过来,形成一个新的链表。例如,如果原来的链表为1 ->2 ->3 ->4 ->5,则反转后的链表为5 ->4 ->3 ->2 ->1。

**反转链表的实现**

反转链表可以通过以下步骤实现:

1. 将头结点指向原来的尾结点。
2. 将原来的头结点设为 NULL。
3. 将原来的尾结点设为新链表的头结点。
4. 重复上述过程,直到所有元素都反转完毕。

**代码示例**

以下是 C语言中反转链表的实现:

c// 定义链表结构体typedef struct Node {
 int data;
 struct Node* next;
} Node;

// 定义函数来反转链表Node* reverseList(Node* head) {
 // 如果链表为空,则返回 NULL if (head == NULL) return NULL;

 // 初始化新链表的头结点 Node* newHead = NULL;

 // 遍历原来的链表 while (head != NULL) {
 // 将原来的尾结点设为新链表的头结点 Node* temp = head;
 head = head->next;
 temp->next = newHead;
 newHead = temp;
 }

 // 返回反转后的链表 return newHead;
}

**代码注释**

上述代码中,`reverseList` 函数负责反转链表。它首先检查链表是否为空,如果是,则返回 NULL。如果链表不为空,则初始化新链表的头结点为 NULL。

然后,它遍历原来的链表,将每个元素都反转过来,并将其设为新链表的头结点。最后,它返回反转后的链表。

**测试代码**

以下是 C语言中测试 `reverseList` 函数的代码:
cint main() {
 // 创建一个链表:1 ->2 ->3 ->4 ->5 Node* head = malloc(sizeof(Node));
 head->data =1;
 head->next = malloc(sizeof(Node));
 head->next->data =2;
 head->next->next = malloc(sizeof(Node));
 head->next->next->data =3;
 head->next->next->next = malloc(sizeof(Node));
 head->next->next->next->data =4;
 head->next->next->next->next = malloc(sizeof(Node));
 head->next->next->next->next->data =5;

 // 反转链表 Node* newHead = reverseList(head);

 // 打印反转后的链表 while (newHead != NULL) {
 printf("%d ", newHead->data);
 newHead = newHead->next;
 }
 printf("
");

 return0;
}

**输出**

上述测试代码的输出为:
54321

这表明 `reverseList` 函数正确地反转了链表。

以上就是本题的全部内容。希望你能通过这个例子理解如何实现链表的反转。

相关标签:
其他信息

其他资源

Top