反轉單鏈表遞迴詳解
阿新 • • 發佈:2018-12-01
反轉一個單鏈表。
示例:
輸入: 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;
}