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