鏈表的反序輸出(實際上鍊表中的內容未改變)
思想:利用遞歸的思想,將鏈表遍歷至最後一個鏈表,然後輸出,在返回上一個節點輸出。
//定義節點類型 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
思想:遍歷一遍鏈表,利用一個輔助指針,記錄遍歷過程中當前指針指向的下一個元素,然後將當前節點元素的指針反轉後,利用已經記錄的指針往後依次移動繼續遍歷。
//定義節點類型
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; }