链表逆序

 1 /*
3  * author:rio_2607
4  */
5 void inverse(struct node *head)
6 {
7     struct node *current = head;
8     struct node *current_next = NULL;
9
10     //如果是一个空链表或者只有一个元素,则直接返回
11     if(NULL == head || NULL == current->next)
12         return;
13
14     current_next = current->next;
15
16     while(current_next->next != NULL)
17     {
18         struct node *temp = current_next->next;
19         current_next->next = current;//逆序指针
20
21         current = current_next;//两个指针都往后移一个
22         current_next = temp;
23     }
24
25     //把最后两个节点逆序
26     current_next->next = current;
27     head->next = NULL;
28
29     head = current_next;//把头指针指向最后一个指针
30
31
32     //打印输出结果
33     struct node *t = head;
34     while(t != NULL)
35     {
36         cout << t->data << "  ";
37         t = t->next;
38     }
39
40 }

1 struct node {
2     int data;
3     struct node *next;
4 };

 1 int main()
2 {
3     struct node *head = NULL;
4     struct node *current = NULL;
5     int number;
6     cout << "please enter the number :" ;
7     cin >> number;
8     for(int i = 1;i <=number;++i)
9     {
10         struct node *temp = (struct node*)new struct node;
11         cin >> temp->data;
12         temp->next = NULL;
13
14         if(NULL == head)
15             head = temp;
16         else
17             current->next = temp;
18
19         current = temp;
20
21     }
22
23
24     //打印数据
25     struct node *t = head;
26     cout << "Before inverse:" << endl;
27     while(t != NULL)
28     {
29         cout << t->data << "  ";
30         t = t->next;
31     }
32
33     cout << endl;
34
35     cout << "After inverse:" << endl;
36
40 }