C 拆分循环链表

C 拆分循环链表,c,data-structures,linked-list,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= t

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

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是结构节点的点 它的定义是这样的

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

然而,我的教授在没有任何解释的情况下将我的答案标记为不正确。有人能告诉我为什么这是错误的吗?

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

是否测试了2节点或3节点循环链表的逻辑?逻辑中的主要问题是
temp=temp->next。P1和P2正在从列表的当前位置向下移动到
下一个->下一个
位置,但是temp正在移动到它的
下一个
位置。我使用temp遍历原始循环链表,以便我可以引用原始列表的元素。创建两个新列表,“newListOdd”和“NewListEvent”。循环循环“if(pop(oldList))push(newListOdd)else break;if(pop(oldList))push(newlistven)else中断;'然后销毁旧列表。完成了,很简单。你是否意识到
p1->next=p1创建一个很短的循环链表?我知道了。我在最初的回答中没有犯同样的错误,我将每个列表的标题保存在一个单独的变量中,以便在其中引用。您是否测试了2节点或3节点循环链表的逻辑?逻辑中的主要问题是
temp=temp->next。P1和P2正在从列表的当前位置向下移动到
下一个->下一个
位置,但是temp正在移动到它的
下一个
位置。我使用temp遍历原始循环链表,以便我可以引用原始列表的元素。创建两个新列表,“newListOdd”和“NewListEvent”。循环循环“if(pop(oldList))push(newListOdd)else break;if(pop(oldList))push(newlistven)else中断;'然后销毁旧列表。完成了,很简单。你是否意识到
p1->next=p1创建一个很短的循环链表?我知道了。我在最初的回答中没有犯同样的错误,我将每个列表的标题保存在一个单独的变量中,以便在其中引用。