单向链表反转(倒置)问题

假设当前创建好的链表如下:

单向链表反转(倒置)问题

首先让头节点与第一个元素节点断开,但是要注意在断开之前需要用p指针指向第一个元素节点来保存第一个元素节点的位置,然后再断开。在这里有一个指针q指向一个指针域为空的节点,这个节点用来做为链表反转后的最后一个节点。

单向链表反转(倒置)问题

让第二个元素节点的指针从指向第三个元素节点变为指向第一个元素节点,以此类推,直至指针p指向原链表最后一个元素。

单向链表反转(倒置)问题
单向链表反转(倒置)问题 
单向链表反转(倒置)问题

p指针指向NULL时,让原头节点的指针域指向原来最后一个元素节点。此时链表倒置已完成。

单向链表反转(倒置)问题

代码如下:

linkList reverse(linkList head){

linkList p,q,pr;

p = head->next;

q = NULL;

head->next = NULL;

while(p){

pr = p->next;

p->next = q;

q = p;

p = pr;

}

head->next = q;

return head;

}