代码,C语言
//输入一个链表,反转链表后,输出链表的所有元素。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
struct Node* next;
} Link;
Link* CreateLink(int a[])
{
Link *head,*p,*tail;
head=NULL;
for(int i=0;i<6;i++)
{
p=(Link *)malloc (sizeof(Link));
p->data=a[i];
p->next=NULL;
if(!head) head=tail=p;
else tail =tail->next=p;
}
return head;
}
Link* ReverseLink(Link *head)
{
Link *reversehead=NULL,*p,*pnext,*ppre=NULL;
p=head;
//优化:判断链表的头指针为NULL,或者整个链表只有一个结点时。
if(!p || !p->next) return p;
while(p)
{
pnext=p->next;
if(pnext==NULL) reversehead=p;
p->next =ppre;
ppre =p;
p=pnext;
}
return reversehead;
}
void PrintLink(Link* head)
{
Link *p;
p=head;
while(p)
{
printf("%d",p->data);
p=p->next;
}
}
int main()
{
Link *head,*reversehead;
int a[6]={1,2,3,4,5,6};
head=CreateLink(a);
reversehead=ReverseLink(head);
PrintLink(reversehead);
return 0;
}