c - 拆分循环链表

标签 c data-structures linked-list

所以我在本周早些时候遇到了一个关于数据结构分配的问题。问题是将一个循环链表分成两半,一个列表中的偶数位置的元素和另一个列表中的奇数位置的元素。这是我尝试过的逻辑。

temp= p1 = front;
p2= front->next;
do
 {p1->next = temp->next->next;
  p1= temp->next->next;
  p2->next = temp->next->next->next;
  p2= temp->next->next->next;
  temp=temp->next;
 } while (temp!= front);
p1->next=p1;
p2->next=p2;

我的逻辑是创建两个指针,一个指向第一个元素,一个指向下一个元素。然后我从一端到另一端遍历列表。在这样做的同时,我将每个指针的下一个指针设置为指向交替位置的元素。 请注意,p1、p2、front、temp 和 next 是 struct Node 的指向 定义为这个

  typedef struct 
  {
   type element;
   Node* next;
  }Node;

但是我的教授在没有任何解释的情况下将我的答案标记为错误。谁能告诉我为什么这是错误的?

最佳答案

假设一开始 temp 指向一个奇数位置,所以 p1 指向奇数而 p2 指向偶数元素但是在第一个 temp=temp->next temp 指向一个偶数元素,当您将 p1 指定为 p1-temp->next->next 时,它是一个偶数元素,现在 p2 将指向奇数位置元素。在每次交替迭代中,p1 将指向偶数位置和其他偶数位置,p2.

关于c - 拆分循环链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46753995/

相关文章:

c - 在 C 程序中使用 sprintf()

c++ - 如何在不重复代码的情况下统一实现双向转换?

data-structures - 查找存储为 Ahnentafel 数组的二进制最大堆的最小元素

c# - 如何在不使用指针的情况下模拟指针?

c++ - 我对 std::list 的实现给出了很多错误

c - 如何将一个小常量加载到 vector 中?

python - 从 C 重新编码到 Python

java - 如何迭代列表并创建自定义非顺序输出

java - 错误 - java 中的 "array required, but LinkedList<LLObj> found"

python - Python 源代码 "free_list = (PyIntObject *)Py_TYPE(v);"如何将指针 free_list 移动到下一个对象?