本系列博客为个人刷题思路分享,有需要借鉴即可。
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; }
完。