把一个单链表逆序。
#include <iostream>
typedef struct node{
int data;
struct node *next;
}node_t;
void insert(node_t **head, int data){
node_t *node = (node_t*)malloc(sizeof(node_t));
node->data = data;
node->next = NULL;
if(*head == NULL){
*head = node;
}else{
node_t* tmp = *head;
while(tmp->next != NULL){
tmp = tmp->next;
}
tmp->next = node;
}
}
void print(node_t *head){
node_t *tmp = head;
while(tmp != NULL){
std::cout << tmp->data << "," << std::endl;
tmp = tmp->next;
}
}
void reverse(node_t **head){
if((*head == NULL) || ((*head)->next == NULL))
return;
node_t *p1 = *head;
node_t *p2 = (*head)->next;
node_t *p3 = (*head)->next;
p1->next = NULL;
while(p3 != NULL){
p3 = p3->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
*head = p1;
}
int main(){
node_t *head = NULL;
int i = 0;
for(i=0;i<5;++i){
insert(&head, i);
}
print(head);
reverse(&head);
print(head);
if(head != NULL){
node_t *tmp;
while(head->next != NULL){
tmp = head;
head = head->next;
delete tmp;
}
delete head;
}
return 0;
}