一、迭代實現
思路:
通過每次遍歷,修改當前結點與上一結點指向,遍歷到最後乙個結點,鍊錶也就實現了反轉
首先我們定義三個指標,分別指向當前節點cur、前一結點pre、下一節點next,並且pre和next為null
起始狀態為:
//第一次**執行**:
next = cur->next;
cur->next = pre;
pre = cur;
cur = next;
經過一次訪問後:
具體**:
listnode* reverselist(listnode* head)
return rev_head;
}
二、遞迴實現
遞迴實現思路與迭代實現思路類似,也是修改指標指向,只是遞迴改變順序是從後向前修改,還是繼續畫圖吧
省略了初始圖:
這是遞迴壓棧到最後乙個元素,設定乙個儲存變數,記錄新鍊錶的頭節點(原鍊錶的尾節點。。。)rev_head
然後將4彈出,現在head指向3, **是:head->next->next = head; head->next = null;
該節點head為3 head->next->next = head將4的next指向3,這裡要注意,修改了指向後,原鍊錶指向還存在,需要刪除,所以有head->next = null; 依照這樣的思路一直遞迴到1,返回之前記錄的rev_head
明白了上面迭代的思路,迭代思路也很容易理解,這裡不再贅述,下面是實現**:
listnode* reverselist(struct listnode* head)
反轉鍊錶 遞迴和非遞迴實現
include stdafx.h include include struct node void createlink node head,int data void printlink node head void reverselink node head node reverselink n...
反轉鍊錶(非遞迴,哨兵,遞迴)
給你單鏈表的頭節點 head 和兩個整數 left 和 right 其中 left right 請你反轉從位置 left 到位置 right 的鍊錶節點,返回 反轉後的鍊錶 非遞迴解法 反轉cur.next cur.next pre pre cur cur next next cur.next 新建...
劍指offer 反轉鍊錶(遞迴與非遞迴)
題目 反轉鍊錶 題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。思路 方法一 非遞迴法 這屬於基礎題,越簡潔越好,力求寫完一次過。這種題感覺只要在腦海裡有個翻轉的過程就很容易寫出來了,並且保證沒有錯誤 如 1 2 3 4 null 先讓1 null 再2 1 null 再3 2 1 null...