+那位高手帮忙用C写一个将链表反转的递归算法!+
<P> 帮忙用C写一个将<FONT color=#f70909>链表反转</FONT>的<FONT color=#ff0000>递归</FONT>算法!比如:
表原数据这:1 2 3 4
计算后的数据为:4 3 2 1</P>
<P>先谢了!</P>
<P>祝大家天天快乐!</P> <P>我说说算法的思路,下面的是思路可以用具体的语言实现:</P><P> 首先定义你的链表结构体,和一个可以存储链表结构的栈。</P><P> main()</P><P>{ </P><P> searchnext;</P><P> make;//从栈里面依次弹出节点形成一个新的链表,就是所求的链表!</P><P>}</P><P>function searchnext;</P><P>{</P><P> read;//读入一个链表节点的函数。</P><P> store;//将这个节点的信息压入栈。</P><P> if( islast ==true)//如果本节点是最后的节点。</P><P>{</P><P> store;//将这个节点的信息压入栈.</P><P>}</P><P>else</P><P>{</P><P> searchnext;</P><P>}</P><P>}</P> <P>这个很简单啊。你用两个链表,相互替换一下,再把替换后的表的元素付给第一个链表不就可以实现倒序了吗?</P> <P>什么叫相互替换?说的具体一些!</P> <P>preNode = NULL;</P>
<P>node = list->Fitst;</P>
<P>while(node != NULL )</P>
<P>{</P>
<P> tempNode = node->next;</P>
<P> node->Next = preNode;</P>
<P> preNode = node;</P>
<P> node = tempNode;</P>
<P>}</P>
[此贴子已经被作者于2004-10-20 20:09:40编辑过] <P>楼上的方法是将链表的前后的指针交换了位置,值得推荐,但是没有用递归呀!</P> <P>不好意思没有看见递归,循环改递归最容易不过啦</P><P>void Reverse(List * list, Node * preNode)</P><P>{</P><P> Node * node = list->First();</P><P> if(node != NULL && node->next != NULL)</P><P> {</P><P> Node * tempNode = node->next;</P><P> node->Next = preNode;</P><P> list->SetHead(tempNode);</P><P> Reverse(list, node);</P><P> }</P><P>}</P><P>调用时只要:Reverse(list, NULL);</P>
求助
<P>楼上的code SetHead是什么没说</P><P> </P> <P>设置节点的头指针吧!</P>
页:
[1]