數據結構:單鏈表(逆序)

1 .單鏈表的逆序操做是鏈表中的一個重要操做,也是面試中不可缺乏的一個環節,幾乎許多涉及到鏈表的面試題中都會提到如何將一個鏈表進行逆序的操做考點;下面採用「迭代循環」的方式來實現將一個鏈表進行逆序,web

如鏈表中原來的各節點值分別爲:面試

A    B    C    D     E

逆序後打印爲:緩存

E    D    C    B     A
------------------------------------------
------------- Function 鏈表逆序 ------------
------------- ReverseLinkList  -----------
------------------------------------------

/*********    鏈表逆序   *************/
/******   typedef   void * LinkList   *****/

void Reverse_LinkList(LinkList list)
	{
	  struct LList *mPtr = (struct LList*)list;
	  struct LinkNode *mPre = NULL;  //指向NULL
	  struct LinkNode *mPcur = mPtr->header.next; 
	  struct LinkNode *mPtmp =NULL;
	  if (NULL == list)
	  {
	   return;
	  }

	  while (mPcur != NULL)
	  {
	    mPtmp = mPcur->next;  //緩存下一個節點
		mPcur->next = mPre;
		mPre = mPcur;
		mPcur = mPtmp;
	  }
	  mPtr->header.next = mPre;
	}
圖(1)  鏈表中各節點值和節點的順序

這裏寫圖片描述
圖(1)svg

圖(2)鏈表逆序後的效果:
這裏寫圖片描述
圖(2)
實現這個鏈表逆序的思路和過程就是從頭結點的下一個節點(即首節點)開始,依次改變指針的指向;其詳細的流程以下圖:3d

步驟(1)
這裏寫圖片描述指針

/******* 指向NULL *******/
struct LinkNode *mPre = NULL; 
/********* 指向首節點 *****/
struct LinkNode *mPcur = mPtr->header.next;  
/******** 輔助指針,保存mPtr所指節點的下一個節點 ***********/
struct LinkNode *mPtmp =NULL; 

1.首先讓mPcur指針指向首節點的下一個節點;由於會改變mPcur指針的指向,因此得借用一個輔助指針mPtmp;讓mPtmp指針保存mPcur指針所指向的下一個節點值;
2.而後改變mPtr的指向,讓其指向指針mPre(爲NULL),讓這個節點稱爲當前的尾節點;
3.改變mPtr指針的指向,讓其指向mPcur,這樣while每循環一次,就讓mPtr向前不斷地移動,直到最終爲NULL;
4.每改變一次mPcur的指向,就讓mPcur指向下一個節點;最終mPcur == NULL時,mPtr恰好爲最後一個節點;
以下圖:

這裏寫圖片描述


博主最新開了一個網店[ 華少潮牌男裝店 ],款式多樣,價格實惠,質量保證。歡迎各位讀者進店查看。購買時請說明是CSDN讀者,優惠更大。期待你的光臨!!!
在這裏插入圖片描述code