逆转单链表,参见http://blog.youkuaiyun.com/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…