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 };