逆转链表

来源:互联网 发布:2konline巅峰科比数据 编辑:程序博客网 时间:2024/06/14 00:56


逆转链表是面试中经常遇到的题目。

一.先看看顺序表(或线性内存)的逆转

SeqList reverse(SeqList L){    if(L!=NULL)    {        SeqList s;        s=(SeqList *)malloc(sizeof(SeqList *)*length);        int i;        for(i=0;i<L->length;i++)        {            s->data[i]=L->data[L->length-1-i];        }        for(i=0;i<L->length;i++)        {            L->data[i]=s->data[i];        }        free(s);        return L;    }}
步骤:
1.分配和原来数据一样大的内存空间
2.从原来数据的末尾开始拷贝
3.利用s获得的数据对原来的数据进行覆盖,释放内存。


二、逆转链表

List Reverse(List L){    Position old_head,new_head,temp;    if(L!=NULL)    {        old_head=L-next;        new_head=NULL;        while(old_head)        {            temp=old_head->next;            old_head->next=new_head;            new_head=old_head;            old_head=temp;        }        L=new_head;        return L;    }}
步骤:

1.建立一个新的头结点

2.将每一个原链表的头结点反转,即原头结点指向新头结点。将指针分为两部分,一部分是已经反转的指针,另一部分未反转

3,直至原链表所有指针已反转

原创粉丝点击