c++ - 给定一个节点数为奇数的单链表,通过只遍历链表一次找到中间节点的两种方法是什么?

标签 c++ list linked-list

这是在 IBM ISL 采访中被问到的。

我回答了这个问题,How to find the middle node of a single linked list in a single traversal (if the length of the list is not given)但它不包含我正在寻找的答案,所以再次张贴在这里。

我有一个单链表,假设节点数是奇数。告诉我两种只遍历列表一次找到中间节点的方法?

我回答了,取 2 个指针 p1 和 p2 将 p2 移动 2 个节点,将 p1 移动 1 个节点。当p2为null时,p1在中间节点。

面试官回答:这是最简单的使用2个指针的方法。告诉我另一种方法。提示:是否有可以使用的编译器属性?

谁能给我一个使用提示的方法?

最佳答案

#include <vector>
#include <list>

typedef std::list<int> listT;

listT::const_iterator
find_middle(const listT &list)
{
  std::vector<listT::const_iterator> v;
  for (listT::const_iterator i = list.begin() ; i != list.end() ; ++i)
    v.push_back(i);

  return v[v.size() / 2];
}

关于c++ - 给定一个节点数为奇数的单链表,通过只遍历链表一次找到中间节点的两种方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12292669/

相关文章:

c++ - 由于 C 和 C++ 中的序列点,您遇到过哪些问题?

c++ - 构建 Boost 动态可链接会导致链接错误?

python - 在python中制作没有引用的列表列表

c - C语言链表结构中安全释放值的策略

c++ - 在不使用数组的情况下找到 "n"数字之间的最大数字?

c++ - 忽略一行输入中的某些输入

java - 在链接列表中查找最小值

c - 删除链表后仍在打印

java - 如何使用jdt提取参数化类型的单一类型

c# - 在 WPF 应用程序中动态创建按钮列表