链表逆序最少空间实现

                             链表                逆序我的实现

首先描述一下链表逆序实现的想法

我们来看看一个节点里有什么

内存中地址为aaaa的区域  left                            内存中地址为 aaba的区域 right

                         data 存放的数据                                             data  存放的数据

                                                                                                                            

 

 

                 addr 下一个的地址 aaba                                     addr  下一个地址xxxx

 

          我们将它逆序要怎么做,实际上就是将 addr 里面的内容改为  上一个节点的地址

         大家都知道,两个数之间交换不能直接相互赋值,而是需要引入一个中间量,保存初始数据不至于丢失。

   同样链表也是一样,要改变addr里面的值,就必须先将里面的值保存起来

 

那么我们的实现就是   NODE *left *right *head

                                           right = left->next;         //保存下个节点

                                           left->next = head              //更改指向的地址,向前指

这样我们就实现了链的断开,而且不丢失下一条链。

此时,在left节点内存放了head的地址,即head被指向了。

所以我们可以进行下面的操作

                                          head = left                //left所以的值都传给head(其实传递的地址值)

                                                                    //在这里我们不必担心会丢失head的数据

                                                                                         //想一想为什么

  既然left里面的值被head 保存下来了,那left就解放了,可以存放别的值而不必担心丢失

                                          left = right

   以上两个语句的意思是将head left 向右移动一个节点

                          至此,这个循环就可以开始工作了。

 

                                        while(结束条件)

                                  

                                            right =left->next;               //移动节点

                                  left->next = head                      //改变指向

                                              head = left                      //移动节点

                                              left = right                      //移动节点

                                  

                      从上面的代码就可以看出  用了三个容器在链表上穿梭


实际代码

 

NODE *reverse_list(NODE *head)

{

NODE *left = NULL,*right;

 

  left = head->next;

 head->next = NULL;

  right =left;                                         //循环开始的准备

 

while(next !=NULL)

{

             right=right->next; 

  left->next = head;

  head =left;        

  left= right;

}

 return head;

}






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值