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

圖解:K 個(gè)一組翻轉(zhuǎn)鏈表 | LeetCode 級(jí)別:困難

開(kāi)發(fā) 開(kāi)發(fā)工具
鏈表作為一種基本的數(shù)據(jù)結(jié)構(gòu),本身理解起來(lái)很簡(jiǎn)單。它通過(guò)指針,將一組零散的內(nèi)存空間(結(jié)點(diǎn)),串聯(lián)起來(lái),組成一個(gè)數(shù)據(jù)結(jié)構(gòu)。

 [[281044]]

一. 序

鏈表作為一種基本的數(shù)據(jù)結(jié)構(gòu),本身理解起來(lái)很簡(jiǎn)單。它通過(guò)指針,將一組零散的內(nèi)存空間(結(jié)點(diǎn)),串聯(lián)起來(lái),組成一個(gè)數(shù)據(jù)結(jié)構(gòu)。

在面試的算法題中,經(jīng)常會(huì)碰到鏈表相關(guān)的面試題。雖然鏈表的結(jié)構(gòu)比較好理解,但是鏈表的題還是比較考驗(yàn)代碼能力的。一些單鏈表的題,指針指來(lái)指去,很容易就把結(jié)點(diǎn)的 next 指針弄丟了,造成鏈表斷裂。

鏈表翻轉(zhuǎn)是一個(gè)面試中經(jīng)常會(huì)碰到的題,在之前的文章中,也聊過(guò)單鏈表翻轉(zhuǎn)、鏈表雙雙翻轉(zhuǎn)(點(diǎn)擊藍(lán)字可跳轉(zhuǎn)了解),今天再來(lái)聊聊它們的「升級(jí)版」,以 K 個(gè)為一組,翻轉(zhuǎn)鏈表,同時(shí)這也是 LeetCode 的第 25 題。

二. K 個(gè)一組翻轉(zhuǎn)鏈表

以 K 個(gè)結(jié)點(diǎn)為一組,將給定的單鏈表進(jìn)行翻轉(zhuǎn)。有點(diǎn)類似之前的鏈表兩兩翻轉(zhuǎn),只是那時(shí)的 K = 2。而在這道題中,K 變成一個(gè)外部傳入的正整數(shù),它是一個(gè)可變的值,并且小于或者等于鏈表的長(zhǎng)度。

 

這道算法題,會(huì)用到之前的知識(shí),既然 K 是可變的,我們無(wú)法估計(jì) K 的大小,但是我們可以將原始鏈表,以 K 個(gè)結(jié)點(diǎn)為一組,執(zhí)行單鏈表翻轉(zhuǎn)的邏輯。

這就要用到之前《單鏈表翻轉(zhuǎn)》的技巧了,不了解的建議先讀讀之前的文章。

既然需要將原始鏈表先以 K 個(gè)結(jié)點(diǎn)分組,再依次執(zhí)行單鏈表翻轉(zhuǎn),在每組字鏈表翻轉(zhuǎn)之后,還需要將它們?cè)俅饋?lái),否則鏈表不就斷裂了么。

這就需要使用兩個(gè)變量 prev 和 end,分別記錄子鏈表的前驅(qū)結(jié)點(diǎn),以及子鏈表的尾結(jié)點(diǎn)。有了 end 這個(gè)子鏈表的尾結(jié)點(diǎn),就可以很容易通過(guò) end.next 拿到下一個(gè)子鏈表的頭結(jié)點(diǎn)。

 

依據(jù)這幾個(gè)結(jié)點(diǎn),就可以完成子鏈表的翻轉(zhuǎn),以及保證在子鏈表翻轉(zhuǎn)后依然可以串起來(lái)。

另外有一個(gè)特殊處理的地方,當(dāng)原始鏈表以 K 個(gè)結(jié)點(diǎn)為一組分組時(shí),末尾不滿一組的子鏈表,保持原樣不進(jìn)行翻轉(zhuǎn)。

參考鏈表兩兩翻轉(zhuǎn)的思路,為了保證我們的代碼邏輯統(tǒng)一,我們?cè)黾右粋€(gè)虛擬的頭結(jié)點(diǎn) dummy,來(lái)方便我們編寫代碼。

直接上代碼,細(xì)節(jié)都在注釋里。

class Solution { public ListNode reverseKGroup(ListNode head, int k) { // 增加虛擬頭結(jié)點(diǎn) ListNode dummy = new ListNode(0); dummy.next = head; // 定義 prev 和 end 結(jié)點(diǎn) ListNode prev = dummy; ListNode end = dummy; while(end.next != null) { // 以 k 個(gè)結(jié)點(diǎn)為條件,分組子鏈表 for (int i = 0; i < k && end != null; i++) end = end.next; // 不足 K 個(gè)時(shí)不處理 if (end == null) break; // 處理子鏈表 ListNode start = prev.next; ListNode next = end.next; end.next = null; // 翻轉(zhuǎn)子鏈表 prev.next = reverseList(start); // 將子連表前后串起來(lái) start.next = next; prev = start; end = prev; } return dummy.next; } // 遞歸完成單鏈表翻轉(zhuǎn) private ListNode reverseList(ListNode head) { if (head == null || head.next == null) return head; ListNode p = reverseList(head.next); head.next.next = head; head.next = null; return p; }}

這里單鏈表的翻轉(zhuǎn),使用了遞歸,一般 K 值都不會(huì)太大,所以用遞歸沒(méi)問(wèn)題,當(dāng)然你也可以換成循環(huán)實(shí)現(xiàn)。對(duì)細(xì)節(jié)不了解的,可以參見(jiàn)《單鏈表翻轉(zhuǎn)》。

三. 小結(jié)時(shí)刻

到這里單鏈表,按 K 分組翻轉(zhuǎn)的具體思路和代碼,就介紹清楚了。我這種處理方式可能不是最高效的,但是應(yīng)該是比較清晰的。

另外在實(shí)際面試中,其實(shí)很多場(chǎng)景下,都不會(huì)直接出 leetcode 上的算法題,都會(huì)稍微變種一下,但是大家要學(xué)會(huì)將復(fù)雜問(wèn)題,轉(zhuǎn)化為簡(jiǎn)單問(wèn)題來(lái)解決。

到這里,鏈表翻轉(zhuǎn)的基礎(chǔ)題,基本上就說(shuō)清楚了,包含三個(gè)篇文章:

單鏈表翻轉(zhuǎn)。

鏈表雙雙翻轉(zhuǎn)。

鏈表以 K 個(gè)一組翻轉(zhuǎn)(本文)。

 

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專欄
相關(guān)推薦

2021-09-02 20:17:46

PythonBytesUnicode

2022-02-16 09:12:22

LeetCode升序鏈表鏈表數(shù)組

2016-11-28 10:06:57

戴爾峰會(huì)

2012-03-06 10:13:14

諾基亞應(yīng)用商店運(yùn)營(yíng)商

2015-04-07 09:44:49

Android

2019-09-03 08:57:52

Linux命令軟件

2019-10-28 11:18:23

戴爾

2023-04-07 07:30:30

數(shù)據(jù)庫(kù)調(diào)研數(shù)據(jù)

2020-02-09 17:30:54

反轉(zhuǎn)鏈表程序員節(jié)點(diǎn)

2021-01-28 08:20:41

鏈表空間復(fù)雜度

2023-09-15 07:33:25

數(shù)據(jù)庫(kù)選型評(píng)估

2018-08-22 09:40:27

2012-12-26 10:34:56

CSSWeb前端

2021-01-21 08:23:29

鏈表單鏈表循環(huán)鏈表

2009-07-10 09:58:09

Chrome OS屏幕造假谷歌

2023-04-19 08:00:00

人工智能視覺(jué)語(yǔ)言模型

2012-05-14 10:01:12

PaaS云計(jì)算平臺(tái)即服務(wù)

2021-02-03 13:23:42

鏈表倒數(shù)結(jié)點(diǎn)

2019-11-11 10:20:10

Linux重命名命令

2022-01-17 09:23:02

LeetCode刪除鏈表算法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 久色| 9久9久| 精品国产一区二区三区成人影院 | 久久69精品久久久久久久电影好 | 一级久久久久久 | 日韩在线观看一区 | 亚洲一区 | 成年人在线视频 | 天天干狠狠| 久久久久久久久久久蜜桃 | 欧美一区精品 | 91精品国产一区二区三区 | 青青草一区 | 观看毛片| 天天操天天干天天透 | 91看片在线观看 | 亚洲毛片在线 | 国产一级特黄视频 | 一区二区三区四区视频 | 国产三级精品三级在线观看四季网 | 色片在线观看 | 亚洲精品久久久蜜桃 | 欧美久久视频 | 国产91在线 | 中日 | 九九看片| 精品久久久久久久久久久 | 亚洲精品视频观看 | 国产极品91 | 一区二区视频 | 日韩在线精品视频 | 国产伦精品一区二区三区在线 | 精品久| 日韩精品一区二区三区第95 | 久久久久亚洲 | 欧美精品91 | 秋霞av国产精品一区 | 国产成人午夜电影网 | 久久精品二区亚洲w码 | 日本不卡一区二区三区在线观看 | 一区中文字幕 | 亚洲精品福利视频 |