递归打印参考自网络 循环式自己写的 以需要输出的行数为参数 基本算法未考虑数太大 溢出的情况 struct LinkNode { LinkNode(int d = 0, LinkNode *ptr = NULL) { data = d; link = ptr; } int data; LinkNode *link; }; LinkNode* InputFront(int endTag) {//前插链表 Input 1 2; 则建立的链表为2 1 LinkNode *newNode = NULL; int val; std::cin >> val; while(val != endTag) { newNode = new LinkNode(val,newNode); std::cin >> val; } return newNode; } void Output(LinkNode *ptr) { while(ptr) { std::cout << ptr->data << " "; ptr = ptr->link; } std::cout << "/n"; } void Output_Recursion(LinkNode *first) { if(first) { //以下两条语句对调,将逆序输出链表 std::cout << first->data << " "; Output_Recursion(first->link); } } LinkNode* Reverse_Recursion(LinkNode *first) {//递归逆置 LinkNode *tail; if(!first || !first->link) return first; else { tail = Reverse_Recursion(first->link); first->link->link = first; first->link = NULL;//注意这句 不能忘掉 return tail; } } LinkNode* Revese_Loop(LinkNode *first) {//循环逆置 用了3个指针 LinkNode* pre = NULL,* next = NULL; while(first != NULL) { next = first->link; first->link = pre; pre = first; first = next; } return pre; } int _tmain(int argc, _TCHAR* argv[]) { LinkNode* first = InputFront(-1); Output_Recursion(first); first = Reverse_Recursion(first); Output(fisrt); return 0; }