非遞迴演算法:
首先定義兩個尾指標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...