循环双链表中的镜像点



我应该计算并列出循环双链表中的镜像点。如果从该元素开始顺时针遍历列表所得到的值序列与从该元素开始逆时针遍历所得到的值序列相同,则列表中的特定元素就是镜像点。我所能做的就是向前和向后遍历。

void traversal(struct Node* start)
{
struct Node *temp = start;

printf("nTraversal in forward direction n");
while (temp->next != start)
{
printf("%d ", temp->data);
temp = temp->next;
}
printf("%d ", temp->data);

printf("nTraversal in reverse direction n");
Node *last = start->prev;
temp = last;
while (temp->prev != last)
{
printf("%d ", temp->data);
temp = temp->prev;
}
printf("%d ", temp->data);
}

如果你能想出解决这个问题的办法,我将不胜感激。

材料已经准备好了。您应该在串联中执行两个遍历:为这些遍历使用不同的指针,并同时移动它们:

bool traversal(struct Node* start)
{
struct Node *forward = start->next;
struct Node *backward = start->prev;

while (forward != start)
{
if (forward->data != backward->data) {
return false;
}
forward = forward->next;
backward = backward->prev;
}
return true;
}

当给定节点是镜像点时,这将返回true。剩下的就是为每个节点调用这个函数,并计算获得true作为返回值的次数…

最新更新