C/C++寻找单链表中间节点 ?
参考答案:
在C/C++中,要寻找单链表的中间节点,我们通常使用快慢指针的方法。这种方法需要两个指针,一个快指针和一个慢指针。开始时,两个指针都指向链表的头节点。然后,快指针每次向前移动两个节点,而慢指针每次只向前移动一个节点。当快指针到达链表的末尾时,慢指针刚好在链表的中间。
下面是一个C++的实现示例:
#include <iostream>
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* findMiddleNode(ListNode* head) {
if (head == NULL) return NULL;
ListNode *slow = head;
ListNode *fast = head;
while (fast != NULL && fast->next != NULL) {
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
int main() {
// 创建一个简单的单链表:1 -> 2 -> 3 -> 4 -> 5
ListNode *head = new ListNode(1);
head->next = new ListNode(2);
head->next->next = new ListNode(3);
head->next->next->next = new ListNode(4);
head->next->next->next->next = new ListNode(5);
// 寻找中间节点
ListNode *middle = findMiddleNode(head);
if (middle != NULL) {
std::cout << "The middle node's value is: " << middle->val << std::endl;
} else {
std::cout << "The list is empty." << std::endl;
}
// 释放内存
// ...
return 0;
}
在这个示例中,findMiddleNode
函数接受一个指向链表头节点的指针,并返回指向中间节点的指针。如果链表为空,它将返回NULL
。在main
函数中,我们创建了一个简单的单链表,并调用了findMiddleNode
函数来寻找中间节点。然后,我们打印出中间节点的值。
注意:在实际应用中,你可能需要处理一些额外的情况,比如链表只有一个节点或者链表有偶数个节点(在这种情况下,中间可能有两个节点)。此外,记得在不再需要链表时释放内存,以避免内存泄漏。