分析:
每次都将原第一个结点之后的那个结点放在L后面,下图是原始的单链表。
为了反转这个单链表,我们先让头结点的next域指向结点2,再让结点1的next域指向结点3,最后将结点2的next域指向结点1,就完成了第一次交换,顺序就变成了Head-结点2-结点1-结点3-结点4-NULL,然后进行相同的交换将结点3移动到结点2的前面,然后再将结点4移动到结点3的前面就完成了反转。
#include<iostream>
#include<cstdlib>const int MaxSize = 101;
using namespace std;
typedef struct ListNode{
int data;
struct ListNode *next;
}ListNode;
void ListNodeReserve(ListNode *L)
{
ListNode *temp;
ListNode *p;
temp = L->next;
while(temp->next!= NULL)
{
p = temp->next;
temp->next = p->next;
p->next = L->next;
L->next = p;
}
}
void Print(ListNode *L)
{
ListNode *p;
p = L->next;
while(p != NULL)
{
cout<<p->data<<endl;
p = p->next;
}
}
int main()
{
int num;
ListNode *A;
ListNode *r;
ListNode *s;
A = (ListNode*)malloc(sizeof(ListNode));
r = A;
while(cin>>num)
{
s = (ListNode*)malloc(sizeof(ListNode));
s->data = num;
r->next= s;
r = r->next;
}
r->next = NULL;
ListNodeReserve(A);
Print(A);
return 0;
}