LeetCode-876:連結串列的中間結點
阿新 • • 發佈:2021-02-10
技術標籤:LeetCode
題目描述
876.連結串列的中間結點
給定一個頭結點為 head 的非空單鏈表,返回連結串列的中間結點。
如果有兩個中間結點,則返回第二個中間結點。
示例1:
輸入:[1,2,3,4,5]
輸出:此列表中的結點 3 (序列化形式:[3,4,5])
示例2:
輸入:[1,2,3,4,5,6]
輸出:此列表中的結點 4 (序列化形式:[4,5,6])
題解
要求連結串列的中間結點,我們可以使用快慢指標來求該題。定義一個慢指標slow,它每次往後走一個,再定義一個快指標fast,他每次往後走兩個,快慢指標同時走,當fast走到NULL或fast->next走到NULL的時候,slow剛好走到連結串列的中間位置。
初始情況:
①slow往後走一個,fast向後走兩個
②迴圈步驟①,直至fast == NULL 或 fast->next == NULL結束。
題解程式碼
struct ListNode* middleNode(struct ListNode* head){
if(head==NULL || head->next==NULL)
{
return head;
}
else if(head->next->next==NULL)
{
return head->next;
}
else {
//快慢指標
struct ListNode* slow = head;
struct ListNode* fast = head;
while(fast && fast->next != NULL)
{
slow = slow->next;
//快指標一次走兩個
fast = fast->next->next;
//當fast走兩個之後正好為NULL,則說明正好走到結束
if (fast==NULL)
break;
}
return slow;
}
}