反转单向链表的程序. 我给的代码是递归的实现, 运用递归就可以避免很多特殊情况的考虑, 看起来也比较优雅. #include <iostream> #include <deque> #include <assert.h> using namespace std; template <typename T> struct Node { T data; Node* next; }; template <typename T> void createList(Node<T>*& t) { t = new Node<T>(); t->next = NULL; Node<T>* p = t; Node<T>* q = NULL; for(int i = 0; i < 10; ++i) { q = new Node<T>(); p->next = q; q->next = NULL; q->data = i; p = p->next; } } template <typename T> Node<T>* reverseList1(Node<T> *&t, Node<T>* p) { assert(t != NULL); if(p == NULL) return p; if(p->next) { Node<T>* pTemp = reverseList1(t, p->next); pTemp->next = p; p->next = NULL; } else t->next = p; return p; } template <typename T> void reverseList2(Node<T>*& t, Node<T>* p) { assert(t != NULL); if(p == NULL) return; Node<T>* pre = NULL; Node<T>* next = NULL; while(p) { next = p->next; p->next = pre; pre = p; p = next; } t->next = pre; } template <typename T> void printList(Node<T>* t) { Node<T>* p = t->next; while(p) { cout << p->data << ' '; p = p->next; } cout << endl; } int main() { Node<int>* t = NULL; createList(t); printList(t); reverseList2(t, t->next); printList(t); return 0; } Test in CodeBlocks.