所以本周早些时候我在数据结构分配中遇到了一个问题。问题是将循环链表分成两半,一个列表中的偶数位置和另一个列表中的奇数位置的元素。这是我尝试的逻辑。
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;
然而,我的教授在没有任何解释的情况下将我的答案标记为错误。有人能告诉我为什么这是错的吗?
答案 0 :(得分:3)
假设首先temp
指向奇数位置,因此p1
指向奇数且p2
指向偶数元素,但在第一个temp=temp->next
临时指向偶数元素之后当您将p1
指定为偶数元素p1-temp->next->next
时,现在p2
将指向奇数位置元素。并且在每个交替迭代中p1
将指向偶数位置在其他情况下,p2
也是如此。