【C语言】怎样把一个单链表反序
9530
参考答案:
(1) 反转一个链表,循环算法
List reverse(List n) { if(!n) //判断链表是否为空,为空即退出。 { return n; } list cur = n.next; //保存头结点的下个结点 list pre = n; list tmp; //保存头结点 pre.next = null; //头结点的指针指空,转换后变尾结点 while ( NULL != cur.next ) //循环直到 cur.next 为空 { tmp = cur; } tmp.next = pre; pre = tmp; cur = cur.next; return tmp; //f 返回头指针 }
(2) 反转一个链表,递归算法
List *reverse( List *oldList, List *newHead = NULL ) { List *next = oldList-> next; //记录上次翻转后的链表 oldList-> next = newHead; //将当前结点插入到翻转后链表的开头 newHead = oldList; //递归处理剩余的链表 return ( next==NULL )? newHead: reverse( t, newHead ); }
说明:循环算法就是移动过程,比较好理解和想到。递归算法的设计虽有一点难度,但是理解了循环算法,再设计递归算法就简单多了。
特别声明:本文仅供交流学习 , 版权归属原作者,并不代表游民部落赞同其观点和对其真实性负责。若文章无意侵犯到您的知识产权,损害了您的利益,烦请与我们联系vmaya_gz@126.com,我们将在24小时内进行修改或删除。