C语言中循环双链表的反求

C语言中循环双链表的反求,c,reverse,doubly-linked-list,circular-list,C,Reverse,Doubly Linked List,Circular List,输入:nodea、nodeb、nodec 输出:nodea,nodeb 预期输出:nodec、nodeb、nodea 我不知道我的代码出了什么问题……有人能帮我吗?什么是练习,是实际反转列表还是只是反向打印?如果确实要反转,请反转“就地”或创建列表的反转副本?以反转方式打印它,然后从末尾到开头迭代,并打印每个节点。实际上不需要反转列表本身。嗯……我不应该先改变它的位置,这样当它被打印出来时,它就会反转吗?如果它是双链接的,那么为什么要反转它呢?您可以用另一个指针遍历它。 struct node

输入:
nodea、nodeb、nodec
输出:
nodea,nodeb
预期输出:
nodec、nodeb、nodea

我不知道我的代码出了什么问题……有人能帮我吗?

什么是练习,是实际反转列表还是只是反向打印?如果确实要反转,请反转“就地”或创建列表的反转副本?以反转方式打印它,然后从末尾到开头迭代,并打印每个节点。实际上不需要反转列表本身。嗯……我不应该先改变它的位置,这样当它被打印出来时,它就会反转吗?如果它是双链接的,那么为什么要反转它呢?您可以用另一个指针遍历它。
struct node *reverse()
{
    if(tail == NULL)
    {
        printf("List is empty");
        return tail;
    }
    struct node *nxt,*prv,*p = tail->next;
    do
    {
        nxt = p->next;
        prv = p->prev;
        p->next = prv;
        p->prev = nxt;
        p = nxt;
    }while(p!=tail->next);
    tail = nxt;
    return tail;
};