拆分循环链表

时间:2017-10-15 10:20:58

标签: 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;
然而,我的教授在没有任何解释的情况下将我的答案标记为错误。有人能告诉我为什么这是错的吗?

1 个答案:

答案 0 :(得分:3)

假设首先temp指向奇数位置,因此p1指向奇数且p2指向偶数元素,但在第一个temp=temp->next临时指向偶数元素之后当您将p1指定为偶数元素p1-temp->next->next时,现在p2将指向奇数位置元素。并且在每个交替迭代中p1将指向偶数位置在其他情况下,p2也是如此。