美文网首页
4.快速找到未知长度单链表的中间结点(C++)

4.快速找到未知长度单链表的中间结点(C++)

作者: codehory | 来源:发表于2019-08-16 00:25 被阅读0次

    给定一个未知长度的单链表,快速求得其中间节点

    示例:输入:1->3->5->3->9
         输出:5
    

    思路

    普通解法:要找到中间结点,首先想到的是通过遍历链表,得到链表的长度。再次遍历链表,找到长度一半的位置,即为解。时间复杂度为O(3/2N)

    快慢指针法:定义两个指针p1,p2,均指向头结点。我们让p2的移动速度是p1的两倍。当p2指向尾结点时,p1指向的即为中间结点。时间复杂度为O(1/2N)

    解:(快慢指针)

    class Solution {
    public:
        int findMidNode(ListNode *L) {
            ListNode *p1=L->next;       //链表包含头结点
            ListNode *p2=L->next;
            while(p2->next!=NULL){
              if(p2->next->next!=NULL) {
                  p2 = p2->next->next;
                  p1 = p1->next;
              }
              else
                  p2=p2->next;
        }
        return p1->val;
    }
    };
    

    相关文章

      网友评论

          本文标题:4.快速找到未知长度单链表的中间结点(C++)

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