
1.两次遍历(一般思路 )
题目给定的很简单,如果不考虑时空复杂度的话可以遍历依次找到节点数N,然后遍历找到mid节点的位置返回即可(mid=N/2)
比较简单,代码略
2.一次遍历(快慢指针)
快慢指针是双指针中比较经典的一个题型
主要的核心点就在于对于迭代条件的判断
struct ListNode* middleNode(struct ListNode* head)
{
struct ListNode* fast=head;
struct ListNode* slow=head;
while(fast && fast->next)
{
slow=slow->next;
fast = fast->next->next;
}
return slow;
}
- while循环这对于快指针处和下一处进行判断
- 对于这个题来讲(就题论题),具体到快指针走两步,慢指针走一步,就可以达到在fast指针找到NULL的同时,可以直接返回中间节点(slow指针的位置)