本系列博客为个人刷题思路分享,有需要借鉴即可。
1.题目链接:
T1:LINK
2.详解思路:
T1:
思路1:统计节点的个数,取半找节点
之后
struct ListNode* middleNode(struct ListNode* head) {
//思路1:统计一下节点的个数,取中间值即可
//计数
int count = 0;
struct ListNode* pcur = head;
while(pcur)//遍历
{
count++;
pcur = pcur->next;
}
//中间节点
int mid = count / 2;
struct ListNode* pmid = head;
while(mid--)
{
pmid = pmid->next;
}
return pmid;
}
思路2:双指针法,走的快的指针一步走两个,慢的走一个
struct ListNode* middleNode(struct ListNode* head) {
//思路2:快慢指针法
struct ListNode* fast = head;
struct ListNode* slow = head;
while(fast && fast->next)//快指针走到头
{
slow = slow->next;
fast = fast->next->next;
}
return slow;
}
完。