從尾到頭列印單鏈表(遞迴與非遞迴)

2021-08-18 16:10:54 字數 801 閱讀 7590

非遞迴演算法:

首先定義兩個尾指標tail1和tail2,遍歷鍊錶使tail1指向鍊錶的尾節點,然後輸出資料,再使tail2等於tail1記錄該節點,第二次遍歷時使tail1指向tail2的前乙個節點,輸出資料,依次類推完成列印。

遞迴演算法:

若該節點的下乙個節點為空的時候直接列印,若不為空傳入下乙個節點為引數再次執行列印函式,完成遞迴。

**實現:

結構體定義及函式宣告:

typedef

struct slistnode

slistnode;

void slitsprinttailtohead(slistnode* phead);//從尾到頭列印

void slistprinttailtoheadr(slistnode* phead);//從尾到頭列印 遞迴

函式實現:

void slitsprinttailtohead(slistnode* phead)

printf("%d->", tail1->_data);

tail2 = tail1;

tail1 = phead;

}printf("\n");

}void slitsprinttailtoheadr(slistnode* phead)

printf("%d->", phead->_data);

}

從尾到頭列印單鏈表 遞迴及非遞迴實現

思路一 陣列法 構建乙個datatype型別的陣列,將單鏈表所有的資料儲存下來,再將陣列倒序輸出就可以。缺點 相對於較長單鏈表不適合,對於較短單鏈表浪費資源void printlist linknode head while i 0 printf n 思路二 頭插法 建立乙個新單鏈表將舊單鏈表中的資...

從尾到頭列印單鏈表

由於單鏈表只能從按單個方向訪問下乙個節點,而不能訪問前乙個節點。首先,解決這個問題肯定要遍歷鍊錶。遍歷的順序是從頭到尾的順序,可輸出的順序卻是從尾到頭。也就是說第乙個遍歷到的結點最後乙個輸出,而最後乙個遍歷到得結點第乙個輸出。這就是典型的 後進先出 可以用 棧實現這種順序。實現程式過程 每經過乙個結...

從尾到頭列印單鏈表

include using namespace std include includetypedef struct node 節點結構 node node create 尾插法建立單鏈表 else q p p node malloc sizeof node p next null if flag 0...