未测试边界条件
#include <iostream>
using namespace std;
struct node{
int data;
node *next;
node(int m_data, node *m_next = NULL){
data = m_data;
next = m_next;
}
};
node *reverse_list_circularly(node *head){
node *pNode = head;
node *next = NULL;
node *prev = NULL;
node *reverse_head = NULL;
while(pNode != NULL){
next = pNode->next;
if (next == NULL)
reverse_head = pNode;
pNode->next = prev;
prev = pNode;
pNode = next;
}
return reverse_head;
}
node *revere_list_recursively(node *prev, node *pNode){
node *next = pNode->next;
if (next == NULL){
pNode->next = prev;
return pNode;
}
pNode->next = prev;
prev = pNode;
pNode = next;
revere_list_recursively(prev, pNode);
}
int main(){
node *head = new node(1);
node *pNode = head;
pNode->next = new node(2);
pNode = pNode->next;
pNode->next = new node(3);
pNode = pNode->next;
pNode->next = new node(4);
pNode = pNode->next;
for (pNode = head; pNode != NULL; pNode = pNode->next){
cout << pNode->data <<endl;
}
cout << endl;
//反转链表(循环)
head = reverse_list_circularly(head);
for (pNode = head; pNode != NULL; pNode = pNode->next){
cout << pNode->data <<endl;
}
cout << endl;
//反转链表(递归)
head = revere_list_recursively(NULL, head);
for (pNode = head; pNode != NULL; pNode = pNode->next){
cout << pNode->data <<endl;
}
cout << endl;
int ttt = 0;
return 0;
}