1. 程式人生 > >反轉單鏈表遞迴詳解

反轉單鏈表遞迴詳解

反轉一個單鏈表。

示例:

輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL

方法一:三指標法

這種辦法實際上就是用next指標記住當前位置的後一個節點,然後讓當前節點與之前節點反轉連結,然後讓當前位置變為next,具體程式碼如下

struct ListNode* reverseList(struct ListNode* head)
{
	struct ListNode* cur = head;
	struct ListNode* prev = NULL
; struct ListNode* next; while(cur) { next = cur -> next; cur -> next = prev; prev = cur; cur = next; } return prev; }

方法二:遞迴(詳解)

我們使用遞迴的原理是每次呼叫函式讓他的頭指標向後走,直到走到尾節點,我們將尾節點作為頭,然後遞歸回去相當於我們倒著訪問了這個單鏈表,具體的過程我們畫成了一幅圖,圖如下奉上。(滑鼠點選圖片可以放大哦)

滑鼠右擊全屏檢視更清晰哦

程式碼如下。

struct ListNode* reverseList(struct
ListNode* head) { if(head == NULL || head -> next == NULL) return head; struct ListNode* h = reverseList(head -> next); head -> next -> next = head; head -> next = NULL; return h; }