C語言 單鏈表的 反序輸出 與 反轉

  1. 鏈表的反序輸出(實際上鍊表中的內容未改變)

思想:利用遞歸的思想,將鏈表遍歷至最後一個鏈表,然後輸出,在返回上一個節點輸出。

//定義節點類型
typedef struct Node
{
	int data;
	struct Node* next;
}Node;
/*..創建鏈表略...*/
//逆序輸出
void print_backwards(Node* head)
{
Node* curr=NULL;
curr=head->next;
if(curr==NULL)
{
return ;
}
print_backwards(curr);
printf("%d\n",curr->data);
}

代碼很簡單,但主要是要靠畫圖來理解,特別注意輸出函數的擺放位置。

2.鏈表的反轉:將鏈表中的內容反轉,如1->2->3->4反轉成4->3->2->1

思想:遍歷一遍鏈表,利用一個輔助指針,記錄遍歷過程中當前指針指向的下一個元素,然後將當前節點元素的指針反轉後,利用已經記錄的指針往後依次移動繼續遍歷。

wKiom1bSdCaAGc2cAAL5HWGTaJo023.png

//定義節點類型

typedef struct Node
{
int data;
struct Node* next;
}Node;
void reverse(Node*head)
{
if(head==NULL)
{
return ;
}
Node *pre,*curr,*ne;
pre=head->next;
curr=pre->next;
pre->next=NULL;//主要是爲了響應鏈表輸出函數。
while(curr)
{
ne=curr->next;
curr->next=pre;
pre=curr;
curr=ne;
}
head->next=pre;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章