反轉鍊錶 遞迴與非遞迴實現

2021-09-13 07:40:46 字數 1316 閱讀 1685

一、迭代實現

思路:

通過每次遍歷,修改當前結點與上一結點指向,遍歷到最後乙個結點,鍊錶也就實現了反轉

首先我們定義三個指標,分別指向當前節點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...