876Middle of the Linked List

目录

 

题目

知识点

解法


题目

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

知识点

 “ / ” 为浮点数除法,返回浮点结果

“ // ” 表示整数除法,返回不大于结果的一个最大整数

 

解法

解法一:

快慢指针,我起了个名字叫快慢小马

def middleNode(head: ListNode) -> ListNode:
    slow=head
    fast=head
    if(head.next is None):
        return head
    while(True):
        if(fast.next is None):
            return slow
        fast=fast.next
        slow = slow.next
        if (fast.next is None):
            return slow
        fast=fast.next

 解法二:

高赞评论里,代码更简洁

    def middleNode(self, head):
        slow = fast = head
        while fast and fast.next:
            slow = slow.next
            fast = fast.next.next
        return slow

解法三:

先数一下有多少个元素

def middleNode(head: ListNode) -> ListNode:
    i=0
    index=head
    while(index):
        i=i+1
        index=index.next
    location=int((i/2))
    for j in range(location):
        head=head.next
    return head

解法四:

把链表里的节点放到数组里,这样会占用额外的空间

class Solution:
    def middleNode(self, head: ListNode) -> ListNode:
        arr = [head]
        while arr[-1].next:
            arr.append(arr[-1].next)
        return arr[len(arr) // 2]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值