1. 程式人生 > 實用技巧 >LeetCode876 連結串列的中間結點

LeetCode876 連結串列的中間結點

給定一個帶有頭結點head的非空單鏈表,返回連結串列的中間結點。

如果有兩個中間結點,則返回第二個中間結點。

這個題找規律不難,只用判斷一下長度為1和長度為2的特殊情況就可以了。

注意==運算子的優先順序高於&運算子。

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9  enum
{Valid,InValid}; 10 int g_middleNode=Valid; 11 class Solution { 12 public: 13 ListNode* middleNode(ListNode* head) { 14 if(head==nullptr){ 15 g_middleNode=InValid; 16 return nullptr; 17 } 18 if(head->next==nullptr) 19 return head; 20 if
(head->next->next==nullptr) 21 return head->next; 22 ListNode* mid=head->next; 23 head=head->next->next; 24 int len=3; 25 while(head->next!=nullptr){ 26 head=head->next; 27 ++len; 28 if((len&1
)==0) 29 mid=mid->next; 30 } 31 return mid; 32 } 33 };