[LeetCode] 876. Middle of the Linked List

Posted 程嘿嘿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 876. Middle of the Linked List相关的知识,希望对你有一定的参考价值。

Easy

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.

 

Note:

  • The number of nodes in the given list will be between 1 and 100.

题目大意:

给出一个链表,总中间截取链表并取后半部分。

 

方法一:先算出链表的长度,然后返回后半部分链表

代码如下:

class Solution {
public:
    ListNode* middleNode(ListNode* head) {
      ListNode *dummy = head;
      int len = 0;
      while (dummy) {
         dummy = dummy->next;
         len++;
      }
      len = len / 2;
      while (len > 0) {
         head = head->next;
         len--;
      }
      return head;
  } };

 

方法二:快慢指针。找中间值,就让快指针每次移动2步,慢指针一次移动1步,直到快指针为空(链表长度为偶数)或快指针的next为空(链表长度为奇数)为止,此时慢指针的链表就是目标结果。

代码如下:

class Solution {
public:
    ListNode* middleNode(ListNode* head) {
        ListNode *slow = head, *fast = head;
        while (fast&&fast->next) {
            slow = slow->next;
            fast = fast->next->next;
        }
        return slow;
    }
};

 

以上是关于[LeetCode] 876. Middle of the Linked List的主要内容,如果未能解决你的问题,请参考以下文章

leetcode-876 Middle of the Linked List

[LeetCode] 876. Middle of the Linked List

[LeetCode] 876. Middle of the Linked List

LeetCode 876 Middle of the Linked List 解题报告

LeetCode.876. Middle of the Linked List

LeetCode 876. Middle of the Linked List(获得链表中心结点)