【问题标题】:mirror point in circular doubly linked list循环双向链表中的镜像点
【发布时间】:2021-09-13 10:16:08
【问题描述】:

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

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);
}

任何关于如何解决问题的想法将不胜感激......

【问题讨论】:

    标签: linked-list traversal doubly-linked-list


    【解决方案1】:

    你有原料。您应该在串联中执行这两个遍历:为这些遍历使用不同的指针,并同时移动它们:

    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的次数作为返回值......

    【讨论】:

    • 您能提供一些反馈吗?这回答了你的问题吗?
    猜你喜欢
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 2013-11-15
    • 2018-08-30
    • 2011-12-15
    相关资源
    最近更新 更多