#include<iostream>
using namespace std;
struct Node{
public:
int data;
struct Node *next;
Node(int data, Node *next): data(data), next(next){}
};
void print(Node *tmp){
while(tmp != NULL){
cout<<tmp->data<<endl;
tmp = tmp->next;
}
}
Node *Initialize(){
struct Node *head = new struct Node(0, NULL);
Node *tmp(NULL), *last(head);
for(int i=1; i<10; ++i){
tmp = last;
last = new Node(i, NULL);
tmp->next = last;
}
return head;
}
Node *Reverse(Node *head){
Node *tmp = head;
Node *last, *second;
while(tmp != NULL){
second = tmp->next;
if(tmp == head)
tmp->next = NULL;
else{
tmp->next = last;
}
last = tmp;
tmp = second;
}
head = last;
return head;
}
int main()
{
Node *head = Initialize();
head = Reverse(head);
print(head);
return 0;
}
反转链表非常简单,循环链表把next拆开指向前一个就行了
在循环的过程中用了临时变量last来表示上一次反转到哪里了,同时用临时变量second表示下一次需要反转的
因为当前的next已经被拆断指向前面一个。