876. Middle of the Linked List
经典链表题
找链表的中间节点 快慢指针
#include<iostream> #include<vector> #include<algorithm> using namespace std; //Definition for singly-linked list. //Given a non-empty, singly linked list with head node head, return a middle node of linked list. // //If there are two middle nodes, return the second middle node. // // // //Example 1: // //Input: [1,2,3,4,5] //Output: Node 3 from this list (Serialization: [3,4,5]) //The returned node has value 3. (The judge's serialization of this node is [3,4,5]). //Note that we returned a ListNode object ans, such that: //ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, and ans.next.next.next = NULL. // Example 2: // //Input: [1,2,3,4,5,6] //Output: Node 4 from this list (Serialization: [4,5,6]) //Since the list has two middle nodes with values 3 and 4, we return the second one. struct ListNode{ int val; ListNode* next; ListNode(int x):val(x),next(NULL){} //初始化列表 }; class Solution{ public: ListNode* middleNode(ListNode* head){ if(head==NULL) return head; ListNode* slow=head; ListNode* fast=head; while(fast&&fast->next){ fast=fast->next->next; slow=slow->next; } return slow; } }; int main(){ vector<int> vals={1,2,3,4,5}; ListNode* head=NULL; ListNode* cur=NULL; for(int i=0;i<vals.size();++i){ if(cur==NULL){ head=cur=new ListNode(vals[i]); }else{ cur->next=new ListNode(vals[i]); cur=cur->next; } } Solution solution; ListNode* middle=solution.middleNode(head); std::cout<<middle->val<<endl; return 0; }