代碼,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;
}