精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一篇文章教你搞定遞歸單鏈表反轉

開發 前端
于單鏈表反轉,阿粉以前寫過一篇文章,是用迭代法實現的,還有一種方法是使用遞歸來實現的,阿粉一直沒敢寫,因為害怕講不清楚。但是不能因為害怕講不清楚就不寫了,對不對。所以這篇文章來使用遞歸來實現一下,并且嘗試將里面的細節一一剖出來,不廢話。

[[320439]]

關于單鏈表反轉,阿粉以前寫過一篇文章,是用迭代法實現的,還有一種方法是使用遞歸來實現的,阿粉一直沒敢寫,因為害怕講不清楚。但是不能因為害怕講不清楚就不寫了,對不對。

所以這篇文章來使用遞歸來實現一下,并且嘗試將里面的細節一一剖出來,不廢話。

首先,咱們要先明確,什么是遞歸。遞歸就是自己調用自己對吧。比如:有一個函數為 f(n) = f(n-1) * n ,(注意,我這里是舉例子,這個函數沒有給出遞歸的結束條件)給 n 賦值為 5 , 則:

 

  1. --> f(5) 
  2. --> 5 * f(4) 
  3. --> 5 * ( 4 * f(3)) 
  4. --> 5 * ( 4 * (3 * f(2))) 
  5. --> 5 * ( 4 * ( 3 * ( 2 * f (1)))) 
  6. --> 5 * ( 4 * ( 3 * ( 2 * 1))) 
  7. --> 5 * ( 4 * ( 3 * 2)) 
  8. --> 5 * ( 4 * 6 ) 
  9. --> 5 * 24 
  10. --> 120 

在看完例子之后,咱們接下來不 BB ,直接 show code:

 

  1. /** 
  2.  * 單鏈表反轉---遞歸實現 
  3.  */ 
  4. public class ReverseSingleList { 
  5.     public static class Node{ 
  6.         private int data; 
  7.         private Node next
  8.  
  9.         public Node( int data , Node next){ 
  10.             this.data = data; 
  11.             this.next = next
  12.         } 
  13.  
  14.         public int getData(){return  data;} 
  15.     } 
  16.     public static void main(String[] args){ 
  17.         // 初始化單鏈表 
  18.         Node node5 = new Node(5,null); 
  19.         Node node4 = new Node(4,node5); 
  20.         Node node3 = new Node(3,node4); 
  21.         Node node2 = new Node(2,node3); 
  22.         Node node1 = new Node(1,node2); 
  23.  
  24.         // 調用反轉方法 
  25.         Node recursiveList = recursiveList(node1); 
  26.         System.out.println(recursiveList); 
  27.     } 
  28.     /** 
  29.      *遞歸實現單鏈表反轉 
  30.      * @param list 為傳入的單鏈表 
  31.      */ 
  32.     public static Node recursiveList(Node list){ 
  33.         // 如果鏈表為空 或者 鏈表中只有一個節點,直接返回 
  34.         // 也是遞歸結束的條件 
  35.         if (list == null || list.next == nullreturn list; 
  36.         Node recursive = recursiveList(list.next); 
  37.         // 將 list.next.next 指針指向當前鏈表 list 
  38.         list.next.next = list ; 
  39.         // 將 list.next 指針指向 null 
  40.         list.next = null
  41.         // 返回反轉之后的鏈表 recursive 
  42.         return recursive; 
  43.     } 

經過上面的代碼,應該能夠看到核心代碼就是,遞歸實現單鏈表反轉部分的那 5 行代碼,別小看了這 5 行代碼,想要真正弄清楚還真的挺不容易的。

我把這 5 行代碼貼在這里,咱們一行行分析,爭取看完這篇博客就能懂~(注釋我就去掉了,咱們專心看這幾行核心代碼)

 

  1. if (list == null || list.next == nullreturn list; 
  2. Node recursive = recursiveList(list.next); 
  3. list.next.next = list ; 
  4. list.next = null
  5. return recursive; 

第一行就是一個判斷,條件不滿足,那就往下走,第二行是自己調用自己,程序又回到第一行,不滿足條件程序向下執行,自己調用自己

就這樣循環到符合條件為止,那么什么時候符合條件呢?也就是 list == null 或者 list.next == null 時,看一下自己定義的鏈表是 1->2->3->4->5->null ,所以符合條件時,此時的鏈表為 5->null ,符合條件之后,程序繼續向下執行,在執行完 Node recursive = recursiveList(list.next); 這行代碼之后,咱們來看一下此時的程序執行結果:

 

 

 

 

我把上面這個給畫出來(阿粉的畫工不是不好,不要在乎它的美丑~)

 

 

 

 

接下來程序該執行 list.next.next = list 執行結束之后,鏈表大概就是這個樣子:

 

 

 

 

那是圖,下面是程序斷點調試程序的結果,發現和上面的圖是一樣的:

 

 

 

 

程序繼續向下走 list.next = null ,也就是說,將 list 的 next 指針指向 null :

 

 

 

 

從圖中看到, list 為 4->null , recursive 為 5->4->null ,咱們來看看程序的結果,是不是和圖相符:

 

 

 

 

完全一樣有沒有!

OK ,還記得咱們剛開始的遞歸函數例子嘛?現在執行完畢,開始執行下一次,咱們繼續來看,此時的鏈表是這個樣子的:

 

 

 

 

接下來程序執行的代碼就是四行了:

 

  1. Node recursive = recursiveList(list.next); 
  2. list.next.next = list ; 
  3. list.next = null
  4. return recursive; 

繼續執行程序,咱們來看結果,將 list.next.next = list 運行結束時,此時鏈表為:

 

 

 

 

從圖中能夠看到,鏈表 list 為 3->4->3->4 循環中, recursive 為 5->4->3->4->3 循環,咱們看一下程序是不是也是如此(在這里我截了兩個循環作為示例):

 

 

 

 

接下來程序執行 list.next = null ,執行完畢之后,就是將 list 的 next 指針指向 null :

 

 

 

 

從圖中能夠看出來, list 為 3->null , recursive 為 5->4->3->null ,上圖看看實際結果和分析的是否一致:

 

 

 

 

說明什么?!說明咱們上面的分析是正確的。接下來的程序分析,讀者們就自行研究吧,相信接下來的分析就難不倒咱們聰明的讀者啦~

反轉單鏈表的前 N 個節點

OK ,咱們趁熱打鐵一下,剛剛是通過遞歸實現了整個單鏈表反轉,那如果我只是想反轉前 N 個節點呢?

比如單鏈表為 1->2->3->4->5->null ,現在我只想反轉前三個節點,變為 3->2->1->4->5->null

有沒有想法?

咱們進行整個單鏈表反轉時,可以理解為傳遞了一個參數 n ,這個 n 就是單鏈表的長度,然后遞歸程序不斷調用自己,然后實現了整個單鏈表反轉。那么,如果我想要反轉前 N 個節點,是不是傳遞一個參數 n 來解決就好了?

咱們就直接上代碼了:

 

  1. /** 
  2.    *反轉單鏈表前 n 個節點 
  3.    * @param list 為傳入的單鏈表 , n 為要反轉的前 n 個節點 
  4.    */ 
  5.   public static Node next
  6.   public static Node reverseListN(Node list,int n){ 
  7.       if (n == 1) { 
  8.           // 要進行反轉鏈表時,先將 list 后的節點數據保存到 next 中 
  9.           next = list.next
  10.           return  list; 
  11.       } 
  12.  
  13.       Node reverse = reverseListN(list.next , n-1); 
  14.       list.next.next = list; 
  15.       // 將 list.next 的指針指向沒有進行反轉的鏈表 
  16.       list.next = next ; 
  17.       return reverse; 
  18.   } 

反轉單鏈表的一部分

既然反轉整個單鏈表實現了,反轉前 N 個節點實現了,那么如果有個需求是反轉其中的一部分數據呢?大概就是這樣,原來的鏈表為 1->2->3->4->5->null ,反轉其中的一部分,使反轉后的鏈表為 1->4->3->2->5->null

借用反轉前 N 個節點的思路,是不是我傳兩個參數進來,一個是開始反轉的節點,一個是結束反轉的節點,然后遞歸操作就可以了?

瞅瞅代碼是怎么寫的:

 

  1. /** 
  2.  *反轉部分單鏈表 
  3.  * @param list 為傳入的單鏈表, m 為開始反轉的節點, n 為結束的反轉節點 
  4.  */ 
  5. public static Node reverseBetween(Node list , int m , int n){ 
  6.     if (m == 1){ 
  7.         return reverseListN(list,n); 
  8.     } 
  9.     list.next = reverseBetween(list.next,m-1,n-1); 
  10.     return list; 

終于給弄清楚了 最后兩個例子,讀者們可以自行研究,我這里因為篇幅的問題就不進行解析了,如果第一個例子自己能夠剖析清楚,下面兩個也沒啥大問題~

其中實現的思路借鑒了網上,真是太巧妙了,分享給大家。

最后,看到阿粉又是調試程序又是畫圖來幫助大家理解的份上,點點在看支持一下?

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2017-09-05 08:52:37

Git程序員命令

2020-02-28 11:29:00

ElasticSear概念類比

2022-10-08 15:07:06

ChatOps運維

2024-04-17 13:21:02

Python匿名函數

2021-05-15 10:16:14

Python匿名函數

2022-05-28 15:59:55

PythonPandas數據可視化

2021-03-24 10:00:32

Python遞歸函數Python基礎

2019-07-15 07:58:10

前端開發技術

2021-03-06 10:05:03

Python函數變量

2019-02-26 15:22:14

MySQL命令數據庫

2021-11-10 09:19:41

PythonShutil模塊

2021-11-17 10:11:08

PythonLogging模塊

2022-03-30 10:51:40

JavaScript性能調優

2021-03-08 09:15:46

日志Filebeat運維

2020-10-09 08:15:11

JsBridge

2021-03-15 08:38:42

StringBuffeJava基礎Java開發

2021-02-27 10:20:18

Go語言flag包開發技術

2021-02-20 10:06:14

語言文件操作

2021-11-13 10:11:45

Pythonurllib庫Python基礎

2021-05-31 08:59:57

Java數據庫訪問JDBC
點贊
收藏

51CTO技術棧公眾號

国内成+人亚洲+欧美+综合在线| 国产一区二区三区站长工具| 亚洲一二三四在线观看| 国产一区免费视频| 一级特黄免费视频| 一区二区蜜桃| 亚洲精品网址在线观看| 青青青在线视频免费观看| 岛国中文字幕在线| 99国产精品久| 成人啪啪免费看| 成人午夜淫片100集| 99久久www免费| 亚洲国内精品视频| 日本在线播放一区二区| 激情aⅴ欧美一区二区欲海潮| 中文字幕乱码亚洲精品一区| 99久久精品久久久久久ai换脸| 中文字幕黄色片| 午夜欧美精品| 色999日韩欧美国产| 中国黄色片视频| 91丨精品丨国产| 色综合久久久久综合| 激情五月六月婷婷| 最新电影电视剧在线观看免费观看| 国产v日产∨综合v精品视频| 国产美女精彩久久| 青青草免费观看视频| 一级欧洲+日本+国产| 在线看国产精品| 久久精品老司机| 成人爽a毛片免费啪啪红桃视频| 欧美性xxxxxxxx| 成人免费在线小视频| 欧美巨大xxxx做受沙滩| 国产精品激情偷乱一区二区∴| 久久久影院一区二区三区| 99在线无码精品入口| 青青草视频一区| 51视频国产精品一区二区| 欧美日韩三级在线观看| 一区二区三区四区电影| 最近2019中文免费高清视频观看www99| 一级国产黄色片| 国产精品美女在线观看直播| 日韩一级片在线观看| 亚洲妇熟xx妇色黄蜜桃| 涩涩涩久久久成人精品| 色噜噜狠狠一区二区三区果冻| 九色自拍视频在线观看| 黄色网页在线播放| 一色桃子久久精品亚洲| 亚洲国产激情一区二区三区| 国产最新视频在线观看| 久久影院视频免费| 免费中文日韩| 蜜桃视频在线观看网站| 久久久99精品久久| 日本免费高清一区二区| 国产亚洲依依| 国产精品美日韩| 亚洲综合激情五月| 成人免费高清| 亚洲一区在线观看网站| 欧美午夜性视频| 欧美伦理91| 一本色道久久综合狠狠躁的推荐| 日本中文字幕片| 欧美一级大黄| 欧美精品亚洲一区二区在线播放| 亚洲精品在线视频播放| 日本一区二区乱| 亚洲黄色www网站| 妺妺窝人体色WWW精品| 日韩一区电影| 精品中文字幕乱| 中文字幕一区二区三区精品| 亚洲免费一区二区| 国产精品久久久久福利| 亚洲在线精品视频| 国产a精品视频| 蜜桃传媒视频麻豆第一区免费观看| 亚洲欧美日本在线观看| 欧美激情一区二区三区不卡| 中文字幕制服丝袜在线| 1区2区3区在线| 在线视频你懂得一区| www.51色.com| 欧洲vs亚洲vs国产| 日韩视频免费观看| 不卡的免费av| 日本亚洲视频在线| 亚洲xxx自由成熟| 青青操在线视频| 亚洲婷婷在线视频| www.av毛片| 国产精品99| 亚洲国产美女精品久久久久∴| 天天躁日日躁aaaa视频| 欧美日韩hd| 国产精品夫妻激情| 成人午夜免费在线观看| 国产精品网站导航| 国产超级av在线| 国产午夜精品一区在线观看| 亚洲日本欧美中文幕| 欧美三级小视频| 美女mm1313爽爽久久久蜜臀| 国产亚洲情侣一区二区无| 日本黄色片在线观看| 欧美日韩国产影院| 九九九久久久久久久| 精品久久久久久久久久久下田| 色综合老司机第九色激情| 国产99免费视频| av动漫一区二区| 日本一二三区视频在线| 最新日韩一区| 日韩精品福利在线| 欧美精品入口蜜桃| 久久99久国产精品黄毛片色诱| 久99久在线| 女囚岛在线观看| 日韩一区二区在线观看视频播放| 亚洲第一综合网| 国产精品久久久免费| 成人免费91在线看| 黄视频网站在线看| 欧美视频日韩视频在线观看| avtt香蕉久久| 亚洲精品人人| 国产成人看片| 四虎影视国产在线视频| 91精品国产欧美一区二区18| 国产黄色大片免费看| 久久中文在线| 欧美三级网色| 亚洲1234区| 亚洲男人天堂古典| 国产免费av一区| 97se亚洲国产综合自在线不卡| 97在线国产视频| 日韩精品视频中文字幕| 久久福利网址导航| 国内精品国产成人国产三级| 亚洲欧美激情视频在线观看一区二区三区| 国产成人黄色网址| 99久久精品费精品国产| 国产日韩在线亚洲字幕中文| 亚洲1卡2卡3卡4卡乱码精品| 欧美午夜影院一区| 免费观看特级毛片| 黑人巨大精品欧美黑白配亚洲| 成人手机视频在线| 日本精品视频| 国内精品久久久久久| 国产 欧美 精品| 黄网动漫久久久| 新91视频在线观看| 日韩国产欧美三级| 日韩av大全| 日韩专区视频网站| 欧美大尺度激情区在线播放| 免费的黄色av| 欧美午夜片欧美片在线观看| 天天躁日日躁aaaa视频| 久久精品99国产国产精| 91精品一区二区三区四区| 亚洲成人五区| 欧美孕妇与黑人孕交| 高清美女视频一区| 91精品综合久久久久久| 国产一级二级三级| 久久视频一区二区| 9l视频白拍9色9l视频| 午夜久久一区| 欧美在线一二三区| 久久久91麻豆精品国产一区| 国内精品久久久久久久久| 欧美日本韩国一区二区| 欧美日本一道本| 日韩福利片在线观看| 国产亚洲午夜高清国产拍精品| 三上悠亚在线一区二区| 欧美精品一级| 日本一区视频在线| 日韩在线观看中文字幕| 国产va免费精品高清在线| 巨大荫蒂视频欧美大片| 日韩电影在线观看中文字幕 | 亚洲一区二区三区在线看| 2一3sex性hd| 蜜桃av一区二区三区电影| 免费看日本黄色| 欧美人妖在线| 91久久精品国产91久久性色tv| 伊人网在线播放| 久久成人亚洲精品| 免费在线视频一级不卡| 日韩亚洲欧美一区二区三区| 无码人妻一区二区三区免费| 亚洲女人小视频在线观看| 日韩片在线观看| 国产精品77777| 中文字幕在线观看第三页| 黄色另类av| 艳母动漫在线免费观看| 精品国产乱码久久久久久蜜坠欲下 | 国产视频精品在线| 国产丰满美女做爰| 欧洲av在线精品| 欧美精品亚洲精品日韩精品| 综合久久国产九一剧情麻豆| 公侵犯人妻一区二区三区| 国产91精品欧美| 伊人国产精品视频| 日韩中文字幕不卡| 免费无遮挡无码永久视频| 欧美日韩亚洲一区二区三区在线| 偷拍视频一区二区| 九九久久成人| 精品国产一区二区三区免费 | 免费一级片91| 男人天堂999| 亚洲国产免费看| 在线观看av的网址| 国产精品99一区二区三区| 亚洲精品乱码视频| 精品国产91久久久久久浪潮蜜月| 蜜桃传媒视频麻豆一区| 欧美爱爱网站| 国模精品一区二区三区| 成人涩涩网站| 国产伦精品一区二区| 视频一区中文字幕精品| 成人黄色在线免费| 91麻豆精品国产综合久久久 | 中文字幕精品影院| 精品久久久久久一区| 超碰cao国产精品一区二区| 亚洲xxx视频| 99re8这里有精品热视频免费| 亚洲最大av网| 91成人午夜| 超碰97网站| 粉嫩一区二区三区四区公司1| 风间由美一区二区三区| 成人盗摄视频| 精品国产一区二区三| 亚洲品质自拍| 性欧美大战久久久久久久免费观看| jlzzjlzz亚洲女人| 亚洲一区二区三区精品视频 | 97成人在线免费视频| 国产一区日韩一区| 午夜免费福利小电影| 国产深夜精品| 国产熟人av一二三区| 免费高清成人在线| 亚洲一二三av| 成人av免费在线观看| 成人免费av片| 国产精品美女久久久久久久久 | 午夜激情在线观看| 蜜臀久久99精品久久久无需会员| caoporn免费在线| 欧美激情第一页xxx| 日本午夜大片a在线观看| 日韩69视频在线观看| 亚洲欧美专区| 国产伦精品一区二区三区免费视频| 思热99re视热频这里只精品| 日本在线观看不卡| 一区二区三区在线电影| 国产精品一线二线三线| 亚洲视频成人| 超碰在线97免费| 国产真实精品久久二三区| www.黄色网| 99天天综合性| 国产18无套直看片| 亚洲一区二区视频| 91久久国产综合久久91| 欧美肥妇毛茸茸| 四虎永久在线精品免费网址| 伊人av综合网| av网站网址在线观看| 2019中文在线观看| 亚洲天堂网站| 久久久久久99| 综合国产在线| 少妇高清精品毛片在线视频| 国产乱码精品一品二品| 亚洲天堂久久新| 亚洲综合色婷婷| 久久久蜜桃一区二区| 欧美一区二区三区男人的天堂| 视频污在线观看| 日韩亚洲欧美成人| 女人高潮被爽到呻吟在线观看| 国产精品三级在线| 粉嫩一区二区三区四区公司1| 亚洲欧美精品| 亚洲影视在线| 成人一区二区三区仙踪林| 中文字幕电影一区| 欧美精品亚洲精品日韩精品| 欧美一区二区性放荡片| 福利在线视频导航| 538国产精品视频一区二区| 国产中文欧美日韩在线| 日韩wuma| 国产亚洲欧洲| 欧美性受xxxx黒人xyx性爽| 久久精品亚洲国产奇米99| 久久久久久久福利| 91精品麻豆日日躁夜夜躁| 高清日韩av电影| 欧美做受高潮1| 久久综合五月婷婷| 久久久国内精品| 国产激情精品久久久第一区二区| 免费在线观看a视频| 欧美日韩激情视频| 六月婷婷综合网| 久久777国产线看观看精品| 欧美黄色a视频| 亚洲高清视频在线观看| 三级一区在线视频先锋 | 国产精品久线观看视频| 国产精品乱码一区二区视频| 日韩电影中文字幕在线| av免费不卡国产观看| 动漫一区二区在线| 欧美视频在线观看| 91成人在线观看喷潮蘑菇| 亚洲精品日日夜夜| 国产福利第一页| 欧美日韩国产成人在线观看| 中文字幕日韩高清在线| 91精品一区二区三区四区| 国产精品1024| 可以直接看的黄色网址| 91精品国产综合久久香蕉麻豆 | 亚洲精品中文在线影院| 国产精品无码久久久久成人app| 自拍偷拍亚洲在线| 午夜精品久久久久久毛片| 青春草在线视频免费观看| 精品午夜久久福利影院| 精品无码久久久久成人漫画| 91精品国产入口| 亚洲淫性视频| 高清国语自产拍免费一区二区三区| 欧美三级视频| 丰满大乳奶做爰ⅹxx视频| 色噜噜夜夜夜综合网| 在线观看av黄网站永久| 91免费视频国产| 激情久久久久| 一级性生活大片| 欧美午夜电影一区| 国产在线高清视频| 国产高清精品一区| 午夜影院日韩| 女教师淫辱の教室蜜臀av软件| 欧美一区二视频| 欧亚在线中文字幕免费| 欧美日本国产精品| 麻豆精品在线观看| 日本天堂中文字幕| 精品夜色国产国偷在线| 成人在线爆射| 欧美爱爱视频网站| 成人国产精品免费观看视频| 精品国产午夜福利| 久久亚洲国产精品| 国产在线播放精品| 性生交免费视频| 亚洲精品乱码久久久久久黑人 | 五月亚洲婷婷| 男人揉女人奶房视频60分| 国产精品久久久久久亚洲毛片 | 最新不卡av| 波多野结衣中文字幕一区| 福利网址在线观看| 菠萝蜜影院一区二区免费| 亚洲网一区二区三区| 37pao成人国产永久免费视频| 国产精品传媒视频| 色一情一乱一乱一区91av| 国产美女久久精品| 最新成人av网站| www.xx日本| 日韩电视剧免费观看网站| 日韩欧乱色一区二区三区在线 | 毛片av一区二区三区| 日本三级理论片| 精品激情国产视频|