数据结构基础--单链表逆序

来源:互联网 发布:js原型和原型链的特点 编辑:程序博客网 时间:2024/06/05 13:28

最近同学问了一道在数据结构的课本上的题,做了很久才做出来,可见课本和基础是很重要的

题目是将一个单链表逆序但是不允许申请额外的空间做中转

思路大抵为:


初始状态:定义三个node *prev,node *head,node *next;   prev指向NULL,head指向链表的头结点A,next指向第一个结点B,将head->next指向prev即NULL,prev=head,head=next,next=head->next,经过以上变化可以将图一化成图二:


从图1到图2的代码如下:

head->next=prev;prev=head;head=next;next=head->next;

这时重复上面的步骤,就可以将图2转化为图3:


然后继续重复,直到:


即head->next==NULL;为终止条件;

代码如下:

typedef struct{    typename data;    node *next;}node;node* List_Reverse(node *L){    node *head=L;    node *prev=NULL;    node *next;    while(head->next!=NULL)    {        next=head->next;        head->next=prev;        prev=head;        head=next;    }    return prev;}



原创粉丝点击