LeetCode 876-Middle of the Linked List(链表中点)

该问题通过使用两个指针,一个慢指针每次移动一步,一个快指针每次移动两步,来找到链表的中点。当快指针到达链表末尾时,慢指针位于链表的中间。这种方法适用于链表节点数为偶数或奇数的情况。

LeetCode 876-Middle of the Linked List

题干:

给定一个链表,要求找到它的中点(偶数个节点时,是找靠后的那个)。

Input: head = [1,2,3,4,5]
Output: [3,4,5]
-----------------
Input: head = [1,2,3,4,5,6]
Output: [4,5,6]

解:

让两个指针slow和fast指向链表头节点。每当慢指针slow前进一步时,快指针fast前进两步;这样当fast走到链表末尾时,slow就指向了链表中点。

注意:

  • 对于快指针fast,奇数个是走到链表末尾,偶数个是走到NULL;

  • 偶数个时,中点有两个,慢指针slow指向的是靠后的那个节点;

  • 如果想要在偶数个时慢指针slow指向靠前的那个节点,只需给快慢指针都加上dummy node,方法依旧。

ListNode* middleNode(ListNode* head) {
        ListNode* fast = head, *slow = head;
        while(fast&&fast->next){ //慢指针slow走一步,快指针fast走两步
            fast = fast->next->next;
            slow = slow->next;
        }
        return slow;   
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值