多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 【算法題】使用遞歸和非遞歸實現單向鏈表的轉置

【算法題】使用遞歸和非遞歸實現單向鏈表的轉置

來源:程序員人生   發布時間:2015-05-13 08:42:59 閱讀次數:3825次

在瀏覽的進程中有任何問題,歡迎1起交換

郵箱:1494713801@qq.com   

QQ1494713801

 

問題:

給1個單向鏈表,把它從頭到尾反轉過來。比如: a -> b -> c ->d 反過來就是 d -> c -> b -> a 

分析:

假定每個node的結構是:

class Node { char value; Node next;}

 

非遞歸方式代碼以下:

1. void reverse(struct Node **list)  

2. {  

3.     struct Node *currentp = *list;  

4.     struct Node *pleft = NULL;  

5.     struct Node *pright = NULL;  

6.       

7.   

8.     while (currentp != NULL) {  

9.         pright = currentp->next;  

10.         currentp->next = pleft;  

11.         pleft = currentp;  

12.         currentp = pright;  

13.     }  

14.     *list = pleft;  

15. } 


遞歸的方式代碼以下:

1. struct Node* recursive_reverse(struct Node *list)  

2. {  

3.     struct Node *head = list;  

4.     struct Node *p = r_reverse(list);  

5.     head->next = NULL;  

6.     return p;  

7. }  

8.   

9. struct Node *r_reverse(struct Node *list)  

10. {  

11.     if (NULL == list || NULL == list->next)   

12.         return list;  

13.     struct Node *p = r_reverse(list->next);  

14.     list->next->next = list;  

15.     return p;  

16. }  

遞歸的方法實際上是非常巧的,它利用遞歸走到鏈表的末端,然后再更新每個node的next 值 (代碼倒數第2句)。 在上面的代碼中, reverseRest 的值沒有改變,為該鏈表的最后1個node,所以,反轉后,我們可以得到新鏈表的head。

 

單鏈表相鄰元素轉置(非遞歸)

1. struct Node* recursive_reverse(struct Node *list)  

2. {  

3.     struct Node *head = list;  

4.     struct Node *p = r_reverse(list);  

5.     head->next = NULL;  

6.     return p;  

7. }  

8.   

9. struct Node *r_reverse(struct Node *list)  

10. {  

11.     if (NULL == list || NULL == list->next)   

12.         return list;  

13.     struct Node *p = r_reverse(list->next);  

14.     list->next->next = list;  

15.     return p;  

16. }  


4   單鏈表相鄰元素轉置(遞歸)

1. struct Node * recursive_partial_reverse(struct Node *list)  

2. {  

3.     if (NULL == list || NULL == list->next)  

4.         return list;  

5.     struct Node *p = list->next;  

6.     struct Node *node = recursive_partial_reverse(list->next->next);  

7.     list->next->next = list;  

8.     list->next = node;  

9.     return p;  

10. }  

 

參考鏈接:

http://blog.csdn.net/skylinesky/article/details/760694

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本一区二区视频在线观看 | 嫩草影院久久精品 | 夜夜伊人 | 一区二区三区福利视频 | 久久亚洲国产精品一区二区 | 欧美日韩亚洲精品国产色 | 亚洲精品456人成在线 | 精品中文字幕不卡在线视频 | 亚洲国产一区二区在线 | www.av在线| 一区二区三区四区亚洲 | v片在线播放 | 高清一区二区三区四区五区 | 天堂在线v | 国产一级淫片a免费播放口之 | 在线视频中文 | www.狠狠操| 亚洲品质自拍视频网站 | 久久中文字幕日韩精品 | 日韩欧美亚洲一区精选 | 国产一精品一aⅴ一免费 | 日本一区二区三区视频在线观看 | 免费观看美女的网站 | 国产不卡高清在线观看视频 | 日韩精品一区二区三区中文精品 | 欧美成人精品福利在线视频 | 国产高清免费视频 | 成年人在线视频网站 | 国产aaa级一级毛片 国产aaa免费视频国产 | 精品番号| miya亚洲私人影院在线 | 琪琪jav| 黄色大全免费看 | 最新亚洲一区二区三区四区 | 免费高清国产 | 欧美专区亚洲专区 | 最近高清中文字幕免费 | 日本亚洲精品久久 | 欧美精品 在线观看 | 欧美16一17sex性hd | 国产手机在线αⅴ片无码观看 |