美文网首页
链表的中间结点-leetcode876(拓展)

链表的中间结点-leetcode876(拓展)

作者: 小豆oo | 来源:发表于2019-01-01 12:54 被阅读0次

题目:见leetcode876

解法

方法一:

ListNode* middleNode(ListNode* head)
{
  vector<ListNode* > A = {head};
  while(A.back()->next != NULL){
    A.push_back(A.back()->next);
  }
  return A[A.size()/2];
}

时间复杂度:n;空间复杂度:n

方法二:

ListNode* middleNode2(ListNode* head)
{
  if(head == NULL) return NULL;
  ListNode* fast = head;
  ListNode* slow = head;
  while(fast != NULL && fast->next != NULL)//①
  {
    slow = slow->next;
    fast = fast->next->next;
  }
 return slow;
}

时间复杂度:0.5n;空间复杂度:O(1)//两个指针

方法三:遍历两遍,第一遍得出链表长度,第二遍得出链表中间值

ListNode* middleNode(ListNode* head) {
        ListNode* p = head;
        int num = 1;
        while(p->next!=NULL)
        {
            p=p->next;
            num++;
        }
        p = head;
        for(int i=1;i<=num/2;i++)
        {
            p=p->next;
        }  
        return p;
    }

时间复杂度:1.5n;空间复杂度:O(1)//一个指针

拓展思考:2019/1/1

1.方法二如果要查找1/n位置的结点,如果写?
当n为2^k,则递归查找前半部分k次
当n不为2^k,待解✨

相关文章

  • 链表的中间结点-leetcode876(拓展)

    题目:见leetcode876 解法 方法一: 时间复杂度:n;空间复杂度:n 方法二: 时间复杂度:0.5n;空...

  • 力扣算法 - 链表的中间结点

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

  • LeetCode 876. 链表的中间结点

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

  • LeetCode 链表 > 876. 链表的中间结点

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

  • 876-链表的中间节点

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

  • 链表-双指针妙用

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

  • 234. 回文链表

    一. 题目: 二. 思路: 快慢指针找到中间结点,反转中间结点以后的链表 拿反转之后的链表和前面链表进行比较,如果...

  • 2019-01-12 Day 7

    1.链表的中间结点来源LeetCode给定一个带有头结点 head 的非空单链表,返回链表的中间结点。如果有两个中...

  • 876. 链表的中间结点

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

  • leetCode (js):876.链表的中间结点

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

网友评论

      本文标题:链表的中间结点-leetcode876(拓展)

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