【数据结构】单链表—求链表中间节点(只遍历一次链表)— 快慢指针

前端之家收集整理的这篇文章主要介绍了【数据结构】单链表—求链表中间节点(只遍历一次链表)— 快慢指针前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

题目:给出一个单链表的,不知道结点N的值,怎样只遍历一次就可以求出中间结点。

我们可以定义两个指针,快指针和慢指针,都从头开始遍历链表,快指针每次走两步,慢指针每次走一步,当快指针走到结尾时,慢指针指向的便是链表的中间节点。

代码如下:

  1. template<class T>
  2. struct ListNode
  3. {
  4. T _value;
  5. ListNode<T>* _next;
  6.  
  7. ListNode(const T& value)
  8. :_value(value),_next(NULL)
  9. {}
  10. };
  11.  
  12. template<class T>
  13. class List
  14. {
  15. public:
  16. List()
  17. :_head(NULL)
  18. {}
  19. bool PushBack();
  20. ListNode<T>* FindMidNode()
  21. {
  22. ListNode<T>* fast = _head;
  23. ListNode<T>* slow = _head;
  24. while(fast && fast->_next)
  25. {
  26. slow = slow->_next;
  27. fast = fast->_next->_next;
  28. }
  29. return slow;
  30. }
  31.  
  32. private:
  33. ListNode<T>* _head;
  34. };

猜你在找的数据结构相关文章