#include <iostream>
using namespace std;
struct Node
{
int data;
Node* next;
Node(int d):data(d),next(NULL){};
};
// 链表的非递归排序
Node* Reverse1(Node* head)
{
Node* pre = NULL;
Node* pNode = head;
Node* reversedHead = NULL;
while(pNode!=NULL)
{
Node* pNextNode = pNode->next;
if(pNextNode == NULL)
{
reversedHead = pNode;
}
pNode->next = pre;
pre = pNode;
pNode = pNextNode;
}
return reversedHead;
}
// 链表的递归排序
Node* Reverse2(Node* list, Node* &head)
{
if(list == NULL || list->next == NULL)
{
head->next = NULL;
head = list;
return list;
}
else
{
Node* temp = Reverse2(list->next,head);
temp->next = list;
return list;
}
}
// 链表的建立
Node* Create(Node* head)
{
cout << "Give a list of int value. Quit if you print -111" << endl;
while(1)
{
int value = 0;
scanf("%d", &value);
if(value == -111)
break;
Node* pNode = new Node(value);
if(head == NULL)
{
head = pNode;
}
else
{
Node* pTmp = head;
head = pNode;
head->next = pTmp;
}
}
return head;
}
void Print(Node* head)
{
Node* pNode = head;
while(pNode != NULL)
{
cout << pNode->data << " ";
pNode = pNode->next;
}
cout << endl;
}
int main()
{
Node* head = NULL;
Node* head2 = NULL;
head = Create(head);
Print(head);
head = Reverse1(head); // 注意用法,返回值
cout << "after 1:" << endl;
Print(head);
Reverse2(head,head); // 注意用法,第二个head
cout << "after 2:" << endl;
Print(head);
return 0;
}