面試題:反轉鏈表

代碼,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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章