LeetCode刷题876-简单-链表的中间结点

举报
布小禅 发表于 2021/08/13 19:08:55 2021/08/13
【摘要】 LeetCode刷题876-简单-链表的中间结点

在这里插入图片描述

@[toc]

前言

算法作为极其重要的一点,是大学生毕业找工作的核心竞争力,所以为了不落后与人,开始刷力扣算法题!

第一遍,不求最优解,但求能过!!!

1. 题目描述

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

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

示例 1:

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

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

提示:

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

2. 题目解析

  1. 遍历链表

    开辟列表/数组空间

    遍历链表

    将节点添加进列表/数组

    返回数组长度//2的元素

  2. 单指针法

    因为链表没有长度,也无法通过下标取值

    所以定义一个指针记录长度

    然后遍历链表,每次遍历让指针+1

    然后再次遍历

    遍历到长度//2的时候停止

  3. 双指针法

    第二个方法有点麻烦,需要遍历两次链表

    两个指针,一个跟随链表

    一个以二倍速度遍历

    然后以而被指针为条件结束循环

    返回链表节点

3. 代码

  1. 暴力解法

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def middleNode(self, head: ListNode) -> ListNode:
            li = []
            while head:
                li.append(head)
                head = head.next
            return li[len(li)//2]
    
    
  2. 单指针

    # Definition for singly-linked list.
    # class ListNode:
    #     def __init__(self, val=0, next=None):
    #         self.val = val
    #         self.next = next
    class Solution:
        def middleNode(self, head: ListNode) -> ListNode:
            a = head  # 找个变量记录头结点,用于两次循环使用
            i = 0
            j = 0
            while a:
                i += 1
                a = a.next
            while j < i//2:
                j += 1
                head = head.next
            return head
    
  3. 双指针

    class Solution:
        def middleNode(self, head: ListNode) -> ListNode:
            ans =  head  # 答案节点
            while head and head.next:
                ans = ans.next
                head = head.next.next
            return ans
    
    

结语

坚持最重要,每日一题必不可少!

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。