1. 程式人生 > >面試題19——怎樣把一個單鏈表反序

面試題19——怎樣把一個單鏈表反序

(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; //返回頭指標 }

(2)反轉一個連結串列,遞迴演算法:

List*reverse(List*oldList,List*newHead=NULL)
{
	List*next=oldList->next;
	oldList->next=newHead;
	newHead=oldList;

	return(next==NULL)?newHead:reverse(t,newHead);
}