Java關(guān)于重排鏈表詳細(xì)解析
1.題目
給定一個單鏈表 L 的頭節(jié)點(diǎn) head ,單鏈表 L 表示為:
?L0→ L1?→ … → Ln-1?→ Ln? 請將其重新排列后變?yōu)椋?/p>
L0?→?Ln?→?L1?→?Ln-1?→?L2?→?Ln-2?→ …
不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值,而是需要實(shí)際的進(jìn)行節(jié)點(diǎn)交換。
?來源:力扣(LeetCode)
2.解析
將一個鏈表分為兩個子鏈表,然后將其歸并。
我們要先找到鏈表的中間節(jié)點(diǎn),在中間節(jié)點(diǎn)將其斷開
然后反轉(zhuǎn)后半鏈表
再將兩個子鏈表逐個連起來
?將后半鏈表反轉(zhuǎn),獨(dú)立成一個子鏈表。
最后將兩個子鏈表的節(jié)點(diǎn)逐個連接就OK了
3.代碼
class Solution { public void reorderList(ListNode head) { ListNode fast = head; ListNode slow = head; //找中間節(jié)點(diǎn) while (fast != null && fast.next != null) { fast = fast.next.next; slow = slow.next; } //截斷鏈表 ListNode cur = slow.next; slow.next = null; //反轉(zhuǎn)后半鏈表 ListNode node = null; while (cur != null) { ListNode curNext = cur.next; cur.next = node; node = cur; cur = curNext; } //合并 ListNode prev = head; ListNode l1 = node; while (l1 != null) { ListNode next1 = prev.next; ListNode next2 = l1.next; prev.next = l1; l1.next = next1; prev = next1; l1 = next2; } } }
到此這篇關(guān)于Java關(guān)于重排鏈表詳細(xì)解析的文章就介紹到這了,更多相關(guān)Java 重排鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項(xiàng)訓(xùn)練
- 劍指Offer之Java算法習(xí)題精講鏈表與二叉樹專項(xiàng)訓(xùn)練
- 劍指Offer之Java算法習(xí)題精講鏈表與字符串及數(shù)組
- Java?數(shù)據(jù)結(jié)構(gòu)與算法系列精講之單向鏈表
- Java 數(shù)據(jù)結(jié)構(gòu)與算法系列精講之環(huán)形鏈表
- Java實(shí)現(xiàn)順序表和鏈表結(jié)構(gòu)
- Java實(shí)現(xiàn)單鏈表基礎(chǔ)操作
- Java?詳解分析鏈表的中間節(jié)點(diǎn)
- 劍指Offer之Java算法習(xí)題精講鏈表專項(xiàng)訓(xùn)練
相關(guān)文章
關(guān)于SpringSecurity簡介以及和Shiro的區(qū)別
這篇文章主要介紹了關(guān)于SpringSecurity簡介以及和Shiro的區(qū)別,在Java應(yīng)用安全領(lǐng)域,Spring Security會成為被首先推崇的解決方案,就像我們看到服務(wù)器就會聯(lián)想到Linux一樣順理成章,需要的朋友可以參考下2023-07-07Java中Set集合轉(zhuǎn)為List集合常見的兩種方式
List是Java中比較常用的集合類,指一系列存儲數(shù)據(jù)的接口和類,可以解決復(fù)雜的數(shù)據(jù)存儲問題,這篇文章主要給大家介紹了關(guān)于Java中Set集合轉(zhuǎn)為List集合常見的兩種方式,需要的朋友可以參考下2023-12-12java編程中字節(jié)流轉(zhuǎn)換成字符流的實(shí)現(xiàn)方法
下面小編就為大家?guī)硪黄猨ava編程中字節(jié)流轉(zhuǎn)換成字符流的實(shí)現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-01-01在?Java?中將Object?轉(zhuǎn)換為?Int的四種方法
這篇文章主要介紹了在Java中如何將?Object?轉(zhuǎn)換為Int,本文研究了在?Java中將Object轉(zhuǎn)換為int的四種不同方法,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05Netty網(wǎng)絡(luò)編程零基礎(chǔ)入門
Netty是一個異步的、基于事件驅(qū)動的網(wǎng)絡(luò)應(yīng)用框架,用于快速開發(fā)可維護(hù)、高性能的網(wǎng)絡(luò)服務(wù)器和客戶端,如果你還不了解它的使用,就趕快繼續(xù)往下看吧2022-08-08