糖逗 发表于 2020-6-2 10:54:16

C++刷leetcode(876. 链表的中间结点)【快慢指针】

题目描述:
给定一个带有头结点 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

 

示例 1:

输入:
输出:此列表中的结点 3 (序列化形式:)
返回的结点值为 3 。 (测评系统对该结点序列化表述是 )。
注意,我们返回了一个 ListNode 类型的对象 ans,这样:
ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next = NULL.
示例 2:

输入:
输出:此列表中的结点 4 (序列化形式:)
由于该列表有两个中间结点,值分别为 3 和 4,我们返回第二个结点。
 

提示:

给定链表的结点数介于 1 和 100 之间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/middle-of-the-linked-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
* Definition for singly-linked list.
* struct ListNode {
*   int val;
*   ListNode *next;
*   ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
    ListNode* middleNode(ListNode* head) {
      //快慢指针
      if(head == NULL) return NULL;
      ListNode* slow = head;
      ListNode* fast = head;
      while(fast != NULL && fast -> next != NULL){
            slow = slow -> next;
            fast = fast -> next -> next;
      }
      return slow;
    }
};
页: [1]
查看完整版本: C++刷leetcode(876. 链表的中间结点)【快慢指针】