Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 给定一个节点数为奇数的单链表,通过只遍历列表一次来查找中间节点的两种方法是什么?_C++_List_Linked List - Fatal编程技术网

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

C++ 给定一个节点数为奇数的单链表,通过只遍历列表一次来查找中间节点的两种方法是什么?,c++,list,linked-list,C++,List,Linked List,这是在一次IBMISL采访中提出的 我已经看过了这个问题,但它没有包含我要找的答案,所以再次在这里发布 我有一个单链表,假设节点的数量是奇数。告诉我两种只遍历列表一次就可以找到中间节点的方法 我回答说,取2个指针p1和p2,将p2移动2个节点,将p1移动1个节点。当p2为空时,p1位于中间节点 采访者回答说:这是使用两个指针的最简单方法。再告诉我一条路。提示:是否有可以使用的编译器属性 有人能给我一个使用提示的方法吗?\include #include <vector> #inclu

这是在一次IBMISL采访中提出的

我已经看过了这个问题,但它没有包含我要找的答案,所以再次在这里发布

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

我回答说,取2个指针p1和p2,将p2移动2个节点,将p1移动1个节点。当p2为空时,p1位于中间节点

采访者回答说:这是使用两个指针的最简单方法。再告诉我一条路。提示:是否有可以使用的编译器属性

有人能给我一个使用提示的方法吗?

\include
#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];
}
#包括 typedef std::列表列表; listT::常量迭代器 查找中间(常量列表和列表) { std::向量v; for(listT::const_迭代器i=list.begin();i!=list.end();++i) v、 推回(i); 返回v[v.size()/2]; }
#包括
#包括
typedef std::列表列表;
listT::常量迭代器
查找中间(常量列表和列表)
{
std::向量v;
for(listT::const_迭代器i=list.begin();i!=list.end();++i)
v、 推回(i);
返回v[v.size()/2];
}

编译器属性?这是C++吗?第一个解决方案听起来像是遍历列表1.5次。@ RandyLevy,ysCuthor属性?这是C++吗?第一个解决方案听起来像是遍历列表1.5次。@ RandyLevy,Yes,这将抛出STD::FIE();当列表为空时。我认为您可以通过在循环之前添加v.push_back(list.begin())来修复它。这将改变元素数为偶数的循环的“中间”的定义。。。。但这也很容易解决。留给读者练习。@JiveDadson-这个问题规定了节点的数量是奇数,所以我认为可以这样假设。在现实生活中,您是对的,最好验证将抛出std::fit()的假设;当列表为空时。我认为您可以通过在循环之前添加v.push_back(list.begin())来修复它。这将改变元素数为偶数的循环的“中间”的定义。。。。但这也很容易解决。留给读者练习。@JiveDadson-这个问题规定了节点的数量是奇数,所以我认为可以这样假设。在现实生活中,你是对的,最好验证这个假设