【C语言】怎样把一个单链表反序

9786

参考答案:

(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小时内进行修改或删除。

相关推荐:

教程推荐