java創(chuàng)建鏈表 C 怎么利用遞歸實現(xiàn)單線鏈表的反向輸出?
C 怎么利用遞歸實現(xiàn)單線鏈表的反向輸出?/*單向鏈表反向輸出*/]#include#include#define Max?LEN 10typedef struct?LINKNODE{int valu
C 怎么利用遞歸實現(xiàn)單線鏈表的反向輸出?
/*單向鏈表反向輸出*/]#include
#include
#define Max?LEN 10
typedef struct?LINKNODE
{
int value
struct?LINKNODE*next
}LINKNODE
/*列表反向的原理是將原列表中的元素逐個向前插入新列表*/linknode*反向鏈接(linknode*head)
{
linknode*reverse=null
linknode*temp=null
while(head)!=null)
{
temp=head->next
head->next=reverse
reverse=head
]}]return reverse
}]void main()
{
int array[MAXulen]={0,1,2,3,4,5,6,7,8,9}
linknode*head=null
linknode*curnode=null
linknode*temp=null
linknode*reverse=null
對于(int i=0,i
如何使用遞歸和非遞歸方式反轉單向鏈表?
問題:給出一個單向列表并從頭到尾反轉它。例如:a-B-C-D依次是D-C-B-a。分析:假設每個節(jié)點的結構是:復制如下代碼:類節(jié)點{char valuenode next},因為在反轉鏈表時,我們需要更新每個節(jié)點的“next”值。但是,在更新下一個值之前,需要保存下一個值,否則無法繼續(xù)。因此,我們需要兩個指針分別指向前一個節(jié)點和下一個節(jié)點。在更新當前節(jié)點的“next”值之后,我們向下移動這兩個節(jié)點,直到到達最后一個節(jié)點。代碼如下:public node reverse(node current){//initializationnode previousnode=nullnode nextnode=nullwhile(current!=null){//保存下一個nodenextnode=current.next//update當前.next//update“下一步”的值當前.下一個=previousNode//shift指針previousNode=currentcurrent=nextNode}return previousNode}上面的代碼使用非遞歸方法,也可以通過遞歸來解決。代碼如下:復制代碼如下:public node reverse(node current){if(current==null)|當前.下一個==null)返回currentNode nextNode=當前.nextcurrent.next=Nullnode reverserest=reverse(nextnode)return reverserest}遞歸方法實際上非常巧妙。它使用遞歸轉到鏈表的末尾,然后更新每個節(jié)點的下一個值(代碼的倒數第二句)。
鏈表的逆序輸出(遞歸調用)?
首先,輸入main函數voidmain(),main函數直接調用reverse函數。在reverse函數中,使用getchar()輸入字符。判斷后,如果不是換行符“n”,則繼續(xù)調用reverse函數直到“n”,然后判斷是否為“n”。如果不是,則使用putchar()輸出剛輸入的字符,并從最后一個單詞開始輸出。最后,當所有輸出都反轉時,程序就完成了。我希望它能幫助你。謝謝你的提問。