逆置双向链表 Reverse a doubly linked list

来源:互联网 发布:linux各版本 编辑:程序博客网 时间:2024/06/14 00:28

逆转单链表,参见http://blog.csdn.net/ojshilu/article/details/9312239。

本文是要逆转双向链表,其基本思想是一致的。只是要考虑的多一些。头尾结点都会出现NULL。

双线链表结点的结构为

   struct Node   {     int data;     Node *next;     Node *prev   }

这是个细心活,难度不大。尤其注意两次循环前后的衔接。

代码:

Node* Reverse(Node* head){    Node *p, *q;    p = NULL;    if(head != NULL)        q = head->next;    while(head != NULL)    {        head->next = p;        head->prev = q;        if(p != NULL)            p->prev = head;        p = head;        head = q;        if(q != NULL)        {                    q = q->next;            head->next = p;        }    }    return p;}

上面的每次操作中,位置关系都是 …p — head — q…

0 0