用链表的就地逆置将数据逆置问题里面while语句里是什么意思?

单链表的就地逆置的就地逆置是指辅助空间O(1)的逆置方法有两种方法:普通循环(头插法重新建立带头节点的新链表的就地逆置)和递归。下面我们详细介绍这两种方法:

算法思想:逆置链表的就地逆置初始为空表中节点从原链表的就地逆置中依次“删除”,再逐个插入逆置链表的就地逆置的表头(即“头插”到逆置链表的就地逆置中)使它成为逆置链表的就地逆置的“新”的第一个结点,如此循环直至原链表的就地逆置为空。

/*向後挪动一个位置*/

对于不含头结点的单链表的就地逆置的头插法原地逆置

算法思想:先假定有一个函数可以将以head为头结点的单链表的就地逆置逆序,并返回新的头结点利用这个函数对问题进行求解:将链表的就地逆置分为当前表头结点和其余部分,递归的过程就是先将表头结点从链表的就地逆置中拆出来,然后对其余部分进行逆序最后将当前的表头结点链接到逆序链表的就地逆置的尾部。递归的终止條件就是链表的就地逆置只剩一个节点时直接返回这个节点。

dfs深度遍历这个单链表的就地逆置 在递归的时候不作处理 在回溯时,标记囙溯开始的位置(新的头结点)将节点和节点的下一节点逆置,将新的头结点传递给上一层递归 接下来逆置上一个节点和上一节点的丅一个节点(逆置已逆置链表的就地逆置的尾节点),并传递标记的头结点直到回溯完成 我们就得到了逆转的单链表的就地逆置和它的頭结点 if(边界状态) //head==NULL说明链表的就地逆置为空,不用处理, 从头到尾我们需要处理的最后一个节点是倒数第二个节点将它和倒数第一逆置,因此遍历到倒是第一个节点就是边界条件 记录 //标记头结点位置并传递(这里选用返回值,还可以通过全局变量)给上一层递归 //回溯部分 //节点囷下一节点(逆置这已逆置链表的就地逆置的尾结点和)将新的头结点传递给上一层递归 /*回溯:将当前表头结点链接到逆序链表的就地逆置的尾部*/


算法实现带头结点单链表的就地逆置就地逆置问题

p=q; /*p指向下一个待插入的结点*/

我要回帖

更多关于 链表的就地逆置 的文章

 

随机推荐