美文网首页
LintCode:链表的中点

LintCode:链表的中点

作者: VickyShen | 来源:发表于2019-03-01 21:30 被阅读0次

描述

找链表的中点。

样例

样例 1:

输入: 1->2->3
输出: 2
样例解释: 返回中间节点的值

样例 2:

输入: 1->2
输出: 1
样例解释: 如果长度是偶数,则返回中间偏左的节点的值。

挑战

如果链表是一个数据流,你可以不重新遍历链表的情况下得到中点么?
思路:快慢指针法。
这里使用快慢指针寻找中点
可以保证时间复杂度为O(n/2)
快指针每次走两步,慢指针每次走一步,快指针到尾部的时候,慢指针的位置就是一半

class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
        next = null;
    }
}
    public static ListNode middleNode(ListNode head) {
        ListNode quickCur = head;
        ListNode slowCur = head;
        if (head == null || head.next == null) {
            return head;
        }
        while (quickCur.next != null && quickCur.next.next != null) {
            quickCur = quickCur.next.next;
            slowCur = slowCur.next;
        }
        return slowCur;
    }

相关文章

  • LintCode:链表的中点

    描述 找链表的中点。 样例 样例 1: 输入: 1->2->3输出: 2样例解释: 返回中间节点的值 样例 2:...

  • 链表的中点

    入门题目,不过挑战挺有意思的,如何不重新遍历就知道哪个点就是中点呢? 做法很取巧,用一个辅助指针,每次向前进两个节...

  • 234. Palindrome Linked List

    判断一个链表是不是回文链表 获取链表的中点,根据快慢指针,将后半部分反转,然后从中点逐个比较。 Runtime: ...

  • leetcode 143 --reorder list

    基本思路:分为三部分: 使用快慢指针来找到链表的中点,并将链表从中点处断开,形成两个独立的链表。ListNode*...

  • 查找链表中点

  • 链表类算法题汇总

    算法题目中常考察的链表操作无非以下几种: 链表反转 链表合并 寻找链表中点 寻找链表倒数第 K 个节点 删除链表节...

  • [LintCode]删除链表中的元素

    原文发表在我的博客:删除链表中的元素求关注、求交流、求意见、求建议。 问题 LintCode:删除链表中的元素 描...

  • lintcode 翻转链表

    三十五题为翻转一个单链表,三十六题为翻转链表中第m个节点到第n个节点的部分样例给出链表1->2->3->4->5-...

  • LintCode 旋转链表

    题目 给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数 样例给出链表1->2->3->4-...

  • LintCode 回文链表

    题目 设计一种方式检查一个链表是否为回文链表。 样例1->2->1 就是一个回文链表。 分析 链表由于其特殊的结构...

网友评论

      本文标题:LintCode:链表的中点

      本文链接:https://www.haomeiwen.com/subject/ivgjuqtx.html