…用c语言编写的对不带头结点的单链表进行就地逆置的算法,求大神详细…
1、就地逆置即算法的辅助空间为O(1)。思路为:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。
2、以下是while循环(条件:香头指向不为空)第一个循环把马弄到车前面,第二个循环把相弄到马前面 第三个循环把士弄到相前面 …直到香指向为空后停止循环。代码如下:只需要一个首结点pHead,就能把链表找到,并倒置。
3、void reverse(LinkList &L)//单链表的就地逆置{ p=L-next;if(p=NULL|| p-next=NULL)return OK;//空表和表中只有一个结点时,不用逆置。
4、算法的核心就是reverse函数,其它的都是辅助建立链表和输出链表的。从数据结构的定义来看这是一个带头节点的链表。要弄的十分明白你要耐心点画图看看。
5、可理解成,将原来单链表的结点取下来,采用单链表的头插法,插入头结点之后。当完成后,最后一个结点变成首元结点,原来的首元结点变成最后一个结点,其他的依次类推。
6、这样原始的第1个元素就会被后面的n-1个元素插入到它的前面,原始的第2个元素就会被后面的n-2个元素插入到它的前面,…直到原始的第n个元素插入到第1个位置。这样就实现了带头结点的单链表的就地逆置。
写一c语言算法,实现对单链表就地逆置。
循环1:铁头移动到香头的下一个指向 循环2:香头的下一个指向首子 循环3:头子的下一个跟着香头 循环4:香头跟着铁头 } 自己用道具操作几遍,然后把流程背会,以后自己根据流程写代码即可。
第一种情况,其实可以考虑用头插法,来实现逆置。下面的算法是基于头插法的思想,逆置链表的,仅供参考。
p-next=NULL;while(q){//每次循环将后一个结点变成新链表的第一个结点p=q;q=q-next;p-next=L-next;L-next=p;}}}上面的两个算法我都用完整的C源程序测试过了,没有问题的,希望这个对你有帮助吧。
可理解成,将原来单链表的结点取下来,采用单链表的头插法,插入头结点之后。当完成后,最后一个结点变成首元结点,原来的首元结点变成最后一个结点,其他的依次类推。
用头插入法来做,直到输入0时,按enter键结束。
用c语言实现单链表的逆置,能将此程序详细的解释一下吗?
1、q-next表示将q的下一个结点改成p。p=q-next表示令p指向q的下一个结点。
2、第二个循环把相弄到马前面 第三个循环把士弄到相前面 …直到香指向为空后停止循环。代码如下:只需要一个首结点pHead,就能把链表找到,并倒置。
3、第一种情况,其实可以考虑用头插法,来实现逆置。下面的算法是基于头插法的思想,逆置链表的,仅供参考。
4、下面这个程序是通过栈对顺序表(数组)逆置,你只要把它改为链表的就行了。
如何用c语言实现单链表的逆置?
自己用道具操作几遍,然后把流程背会,以后自己根据流程写代码即可。
{ //进入核心了楼主 t=s-next; //用t指向s后面的那个元素 s-next=p; //把s指向她前面那个,这个时候就实现了逆向了。而且是就地逆向。
第一种情况,其实可以考虑用头插法,来实现逆置。下面的算法是基于头插法的思想,逆置链表的,仅供参考。
用头插入法来做,直到输入0时,按enter键结束。
从第一个节点开始,修改指针的指向 然后再修改第二个节点,第三个节点。
我用C语言写出单链表的就地逆置,看看哪里错了
刚刚我回答了链式实现的倒置,这里是顺序实现的。上述代码是伪码。–这个是交换值的意思。floor也是自写函数,应该是去不大于参数的整数,如floor(2) = 3。
代码如下:只需要一个首结点pHead,就能把链表找到,并倒置。
第一种情况,其实可以考虑用头插法,来实现逆置。下面的算法是基于头插法的思想,逆置链表的,仅供参考。
t=s-next; //用t指向s后面的那个元素 s-next=p; //把s指向她前面那个,这个时候就实现了逆向了。而且是就地逆向。
用头插入法来做,直到输入0时,按enter键结束。
怎样对单向链表进行就地逆置?
第一个循环把马弄到车前面,第二个循环把相弄到马前面 第三个循环把士弄到相前面 …直到香指向为空后停止循环。代码如下:只需要一个首结点pHead,就能把链表找到,并倒置。
void reverse(LinkList &L)//单链表的就地逆置{ p=L-next;if(p=NULL|| p-next=NULL)return OK;//空表和表中只有一个结点时,不用逆置。
下面的算法是基于头插法的思想,逆置链表的,仅供参考。
从数据结构的定义来看这是一个带头节点的链表。要弄的十分明白你要耐心点画图看看。