您的位置:首页 > 其它

链表实现逆置

2017-03-15 20:29 148 查看
以 1,2,3,4,5为举例


主要的算法部分:

p=L->next;//p指向L的下一个结点,即为1的位置

L->next=NULL;//把头结点和1之间断开

while(p!=NULL)//循环结束的条件

{

    q=p;//Q也指向p的位置

    p=p->next;//p再指向2的位置

    q->next=L->next;//q的下一个指向空

    L->next=q;//L的next再指向1(第一次的循环只把头指针和1先断开,再链接起来,其余以此类推)

}//这是算法的非递归实现


代码的具体实现://递归算法的实现


#include"stdio.h"

const int N=6;

typedef struct node

{

    int data;

    struct node *next;

}LinkedNode,*LinkList;

LinkList CreateList(int a[N])//创建一个单链表
{

    LinkedNode *head=new LinkedNode();//清空头结点

    head->data=a[0];//头结点放第一个数据

    head->next=NULL;

    for(int i=N-1;i>=1;i--)

    {

        LinkedNode *p=new LinkedNode();

        p->data=a[i];//数据域存放数据

        p->next=head->next;//指针域存放next的指针

        head->next=p;

    }

    return head;

}

void PrintList(LinkList head)

{

    if(NULL==head)

        printf("The List is empty!\n");

    else

    {

        LinkedNode *p=head;

        while(p!=NULL)

        {

            printf("%d ",p->data);//输出一个数据

            p=p->next;//指向下一个结点的位置

        }

        printf("\n");

    }

}

void ReverseList(LinkedNode *pcur,LinkList &head)//链表逆置,头指针会发生变化

{

    if(NULL==pcur||NULL==pcur->next)

        head=pcur;

    else

    {

        LinkedNode *pnext=pcur->next;//指向该数据的下一个数据的位置

        ReverseList(pnext,head);

        pnext->next=pcur;

        pcur->next=NULL;

    }

}

int main()

{

    int a
={1,2,3,4,5,6};

    LinkedNode *list=CreateList(a);//创建一个链表

    PrintList(list);//输出该链表

    LinkedNode *ptemp=list;

    ReverseList(ptemp,list);

    PrintList(list);//输出该链表

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: