链接列表反向而不使用循环?

时间:2017-01-23 06:29:40

标签: c++ algorithm data-structures

我的一位高级管理人员问我,可以在不使用循环的情况下撤销单链表吗?如果有,怎么样?他的笑容似乎告诉我这是可能的,但我什么都想不到。有人想过这个吗?

3 个答案:

答案 0 :(得分:4)

可以通过交换它的headtail指针来反转 O(1)中的双链表,并且(取决于实现)设置某种标志,告诉列表现在应该向后迭代(即遵循back指针向前迭代,然后跟随next指针向后迭代)。

对于单链表,我认为不可能比 O(n)更快地逆转它。

答案 1 :(得分:2)

递归方法

struct node {
    int value;
    struct node* next;
};

struct node** _reverse(struct node* n)
{
    if (NULL != n->next)
        *_reverse(n->next) = n;
    return &(n->next);
}

// this is the entry
void reverse(struct node* head)
{
    *_reverse(head) = NULL;
}

答案 2 :(得分:1)

在STL中,有rbegin()和rend()迭代器,用于以相反的顺序遍历集合。但它不适用于单个链表。