链表中间数

题目

给定一个带有头结点 head 的非空单链表,返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。

示例:
输入:[1,2,3,4,5]
输出:此列表中的结点 3 (序列化形式:[3,4,5])

输入:[1,2,3,4,5,6]
输出:此列表中的结点 4 (序列化形式:[4,5,6])

解答

1、遍历链表,新建一个ListNode数组,将链表元素copy到数组,数组的length/2下标就是目标Node
  public static ListNode middleNode(ListNode head) {
        ListNode[] ints = new ListNode[countLength(head)];

        int i = 0;
        ints[0] = head;
        while (head.next != null) {
            i += 1;
            ints[i] = head.next;
            head = head.next;
        }
        return ints[ints.length / 2];
    }

    public static int countLength(ListNode head) {
        int length = 1;
        while (head.next != null) {
            length += 1;
            head = head.next;
        }
        return length;
    }

    static class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }
2、单指针
public static ListNode middleNode1(ListNode listNode){
        int i = 0;
        ListNode var = listNode;
        while (var !=null){
            i++;
            var = var.next;
        }

        int j = 0;
        ListNode head = listNode;
        while (j<i/2){
            j++;
            head = head.next;
        }
        return head;
    }

2、快慢指针,慢指针依次遍历,快指针比慢指针快两倍
public static ListNode middleNode2(ListNode head) {
        ListNode p = head, q = head;
        while (p != null && q.next != null) {
            p = p.next;
            q = q.next.next;
        }
        return p;
    }

分析

1、遍历的方式 时间复杂度:O(N) 空间复杂度:O(N)
2、快慢指针方式 时间复杂度:O(N) 空间复杂度:O(1)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 基本概念 链表的含义: 链表是一种用于存储数据集合的数据结构,具有以下属性 相邻元素之间通过指针相连 最后一个元素...
    古剑诛仙阅读 1,035评论 0 3
  • 搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识...
    醒着的码者阅读 4,654评论 1 45
  • 什么是数组? 数组简单来说就是将所有的数据排成一排存放在系统分配的一个内存块上,通过使用特定元素的索引作为数组的下...
    启明_b56f阅读 1,004评论 0 0
  • LeetCode-链表 链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺...
    raincoffee阅读 1,279评论 0 6
  • 转载请注明出处:http://www.jianshu.com/p/c65d9d753c31 在上一篇博客《数据结构...
    Alent阅读 3,550评论 4 74