成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

看一遍就理解,圖解單鏈表反轉

開發 前端
反轉鏈表是程序員必備的基本素養,經常在面試、筆試的過程中出現。一直覺得反轉鏈表實現代碼不是很好理解,決定搬leetcode那道經典反轉鏈表題出來,用十多張圖去解析它,希望加深大家對鏈表反轉的理解,謝謝閱讀。

 前言

反轉鏈表是程序員必備的基本素養,經常在面試、筆試的過程中出現。一直覺得反轉鏈表實現代碼不是很好理解,決定搬leetcode那道經典反轉鏈表題出來,用十多張圖去解析它,希望加深大家對鏈表反轉的理解,謝謝閱讀。

[[314356]]

leetcode的反轉鏈表原題&答案

題目描述: 反轉一個單鏈表。

 

  1.  輸入: 1->2->3->4->5->NULL 
  2.  輸出: 5->4->3->2->1->NULL 

分析:

假設存在鏈表 1 → 2 → 3 → Ø,我們想要把它改成 Ø ← 1 ← 2 ← 3。

在遍歷列表時,將當前節點的 next 指針改為指向前一個元素。由于節點沒有引用其上一個節點,因此必須事先存儲其前一個元素。在更改引用之前,還需要另一個指針來存儲下一個節點。不要忘記在最后返回新的頭引用!

代碼實現:

 

  1.   public ListNode reverseList(ListNode head) {   
  2.       ListNode prev = null;    
  3.       ListNode curr = head;    
  4.       while (curr != null) {   
  5.           ListNode nextTemp = curr.next
  6.           curr.next = prev; 
  7.           prev = curr; 
  8.           curr = nextTemp; 
  9.       } 
  10.      return prev; 
  11.  } 

圖解鏈表反轉代碼的實現

接下來,我們圖解以上代碼實現,先對以上實現代碼加上行號,如下:

 

  1.   public ListNode reverseList(ListNode head) {  //1 
  2.       ListNode prev = null;   // 2 
  3.       ListNode curr = head;   // 3 
  4.       while (curr != null) {   //4 
  5.           ListNode nextTemp = curr.next; //5 
  6.           curr.next = prev;  // 6 
  7.           prev = curr;  //7 
  8.           curr = nextTemp; //8 
  9.       }  
  10.      return prev;  //9 
  11.  } 

第一行代碼圖解

 

  1. public ListNode reverseList(ListNode head) { //1 

我們順著題目描述意思,假設鏈表就有1、2、3個元素吧,后面還跟著一個null,又因為輸入是ListNode head,所以這個即將要反轉的鏈表如下:

 

第二行代碼圖解

 

  1. ListNode prev = null; // 2 

將null賦值給prev,即prev指向null,可得圖如下:

 

第三行代碼圖解

 

  1. ListNode curr = head; 

將鏈表head賦值給curr,即curr指向head鏈表,可得圖如下:

 

循環部分代碼圖解

 

  1.   while (curr != null) {   //4 
  2.           ListNode nextTemp = curr.next; //5 
  3.           curr.next = prev;  // 6 
  4.           prev = curr;  //7 
  5.           curr = nextTemp; //8 
  6.       } 

循環部分是鏈表反轉的核心部分,我們先走一遍循環,圖解分析一波。

因為curr指向了head,head不為null,所以進入循環。先來看第5行:

  1. ListNode nextTemp = curr.next; //5 

把curr.next 賦值給nextTemp變量,即nextTemp 指向curr的下一節點(即節點2),可得圖如下:

 

再執行到第6行:

 

  1. curr.next = prev; // 6 

把prev賦值給curr.next,因為prev初始化化指向null,即curr(節點1)指向了null,鏈表圖解成這樣了:

 

然后我們看執行到第7行

 

  1. prev = curr; //7 

把curr賦值給prev,prev指向curr,圖解如下:

 

接著,我們執行到第8行:

 

  1. curr = nextTemp; //8 

把nextTemp賦值給curr,即curr指向nextTemp,圖解如下:

 

至此,第一遍循環執行結束啦,回到循環條件,curr依舊不為null,我們繼續圖解完它。

5-8行代碼又執行一遍,依次可得圖:

 

  1.  ListNode nextTemp = curr.next; //5 
  2.          curr.next = prev;  // 6 
  3.          prev = curr;  //7 
  4.          curr = nextTemp; //8 

執行完 ListNodenextTemp=curr.next;后:

 

執行完 curr.next=prev;后:

 

執行完 prev=curr;后:

 

執行完 curr=nextTemp;后:

 

來到這里,發現curr還是不為null,再回到while循環,再執行一遍:

 

  1. ListNode nextTemp = curr.next; //5 
  2. curr.next = prev;  // 6 
  3. prev = curr;  //7 
  4. curr = nextTemp; //8 

依次可得圖:


 


 


 

 

來到這里,我們發現curr已經為null了,可以跳出循環了。這時候prev指向的就是鏈表的反轉呀,所以第9行執行完,反轉鏈表功能實現:

 

  1. return prev; //9 

 

責任編輯:華軒 來源: 撿田螺的小男孩
相關推薦

2021-08-12 10:36:18

order byMySQL數據庫

2021-06-15 07:15:15

Oracle底層explain

2022-01-17 20:59:37

開發group by思路

2025-02-13 09:06:27

2021-12-01 07:26:13

IO模型異步

2021-10-07 20:12:03

MVCC事務原理

2024-03-26 07:59:32

IO模型多路復用

2024-03-12 08:20:57

零拷貝存儲開發

2022-05-08 23:05:38

Route-Poli路由策略

2019-03-19 14:11:44

VLANLANMAC

2023-09-12 07:31:45

HashMap線程

2022-08-26 10:41:03

指針C語言

2021-10-08 07:53:01

事務隔離級別

2019-09-19 08:04:40

網絡七層模型TCPUDP

2023-08-14 07:49:42

AI訓練

2017-12-26 14:17:24

潤乾報表

2023-01-10 19:47:47

Redis原理多線程

2020-02-07 11:07:53

數組鏈表單鏈表

2015-10-10 11:10:24

重敲代碼拷貝粘貼

2021-11-25 08:16:46

Wi-FiWi-Fi 6路由Wi-Fi 5
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清在线精品 | 黄色成人av | 91精品国产综合久久久动漫日韩 | av一区二区三区四区 | 亚洲高清av在线 | 成人亚洲精品久久久久软件 | 日韩欧美在线一区 | 亚洲综合色 | 国产精品视频免费看 | 亚洲先锋影音 | 91一区二区 | 拍真实国产伦偷精品 | 99久久久国产精品免费消防器 | 国产亚洲成av人片在线观看桃 | 久久久久亚洲 | 国产欧美精品 | 香蕉91| 久久国产亚洲 | 精品视频一区二区三区四区 | 日韩精品在线看 | 请别相信他免费喜剧电影在线观看 | 亚洲成av人影片在线观看 | 精品免费视频 | 日本激情一区二区 | 午夜欧美日韩 | 精品一区二区三区在线观看 | 在线观看亚 | 亚洲国产aⅴ精品一区二区 免费观看av | 欧美片网站免费 | 亚洲国产一区二区三区在线观看 | 亚洲免费在线 | 男女网站在线观看 | 国产精品18hdxxxⅹ在线 | 亚洲黄色片免费观看 | 一区二区三区四区国产 | 成人亚洲 | 国产中文| 国产精品日日做人人爱 | 国产精品美女一区二区 | 91精品国产色综合久久不卡98口 | 久久在线|