每日一题——反转链表
发布人: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` 函数正确地反转了链表。
以上就是本题的全部内容。希望你能通过这个例子理解如何实现链表的反转。