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

 

posted @ 2020-07-20 15:26  __rookie  阅读(109)  评论(0编辑  收藏  举报