void reverse(node*& head) { if ( (head == 0) || (head->next == 0) ) return;// 边界检测 node* pNext = 0; node* pPrev = head;// 保存链表头节点 node* pCur = head->next;// 获取当前节点 while (pCur != 0) { pNext = pCur->next;// 将下一个节点保存下来 pCur->next = pPrev;// 将当前节点的下一节点置为前节点 pPrev = pCur;// 将当前节点保存为前一节点 pCur = pNext;// 将当前节点置为下一节点 } }
首先我们分析一下这个思想:
1->2->3->4->5->6;
如果要逆转它第一步实现为:
1<-2 3->4->5->6;
看好这里会断链.(我一直相不通的就是这里)
其实在循环中我们只需要3个节点指针: 上一个, 当前, 下一个
在进入循环之前把这个三个指针准备好就行了
具体看上面代码实现
其实用循环实现是最简单的
参考:
http://www.yuanma.org/data/2006/1106/article_1785.htm
http://www.cppblog.com/tx7do/archive/2009/01/06/71280.html