單鏈表轉置

2022-07-11 21:12:14 字數 2584 閱讀 5833

關於單鏈表的逆置,大家都很清楚有兩種基本方法:(1)普通的迴圈的方法。(2)遞迴呼叫方法。今天正好研究這兩種方法,發現很不理解**這麼寫的具體的作用,誠如很多人所說,吃透這個還是要自己畫乙個詳細的過程圖。今天就給大家介紹一下(普通的迴圈方法)我學習下來的一些經驗,如有不對之處還望大家一起交流。

首先,以下是關於單鏈表逆置的普通迴圈方法的**:

//單鏈表定義

class listnode;

//單鏈表逆置實現

listnode reverselist(listnode phead)

listnode prev = null;

listnode pcur = phead;

while(pcur != null)

return prev;

}

下面我們來用**的方法具體介紹整個**的實現流程:

初始狀態:

第一次迴圈:

第一次迴圈過後,步驟①:ptemp指向head,步驟②:pcur指向p1,步驟③:ptemp->pnext指向null。

此時得到的prev為:

第二次迴圈:

第二次迴圈過後,步驟①:ptemp指向p1,步驟②:pcur指向p2,步驟③:ptemp->pnext指向head。

此時得到的prev為:

第三次迴圈:

第三次迴圈過後:步驟①:ptemp指向p2,步驟②:pcur指向p3,步驟③:ptemp->pnext指向p1。

此時得到的prev為:

第四次迴圈:

第四次迴圈過後:步驟①:ptemp指向p3,步驟②:pcur指向null,步驟③:ptemp->pnext指向p2。

此時得到的prev為:

至此,單鏈表的逆置完成。

首先,以下是關於單鏈表逆置的普通迴圈方法的**:

//單鏈表定義

class listnode;

//單鏈表逆置實現

listnode reverselist(listnode phead)

listnode prev = null;

listnode pcur = phead;

while(pcur != null)

return prev;

}

下面我們來用**的方法具體介紹整個**的實現流程:

初始狀態:

第一次迴圈:

第一次迴圈過後,步驟①:ptemp指向head,步驟②:pcur指向p1,步驟③:ptemp->pnext指向null。

此時得到的prev為:

第二次迴圈:

第二次迴圈過後,步驟①:ptemp指向p1,步驟②:pcur指向p2,步驟③:ptemp->pnext指向head。

此時得到的prev為:

第三次迴圈:

第三次迴圈過後:步驟①:ptemp指向p2,步驟②:pcur指向p3,步驟③:ptemp->pnext指向p1。

此時得到的prev為:

第四次迴圈:

第四次迴圈過後:步驟①:ptemp指向p3,步驟②:pcur指向null,步驟③:ptemp->pnext指向p2。

此時得到的prev為:

至此,單鏈表的逆置完成。

單鏈表轉置

編寫乙個單鏈表反序的函式 include include typedef int datatype using namespace std typedef struct node node void initnode node head void printnode node head cout e...

單鏈表轉置

單鏈表轉置都很熟裡,這裡只是練一下鍊錶操作,另外還有幾點需要注意,如果是遞迴解決該問題呢,如果是相鄰兩個轉置有怎麼處理。1.單鏈表轉置非遞迴 void reverse struct node list list pleft 2.單鏈表轉置遞迴 struct node recursive revers...

單鏈表的轉置 排序操作

該 主要是針對對鍊錶操作不是很熟悉的朋友,也是自己在面試當中經常 碰到的程式設計問題,因此利用業餘時間寫下了此練習性質的程式。以下是源 include include include include struct st void print struct st 煉表頭節點的初始化 struct st...