Java 深入分析鏈表面試實(shí)例題目
鏈表面試題一
判斷鏈表是否是回文結(jié)構(gòu)。
問(wèn)題描述:
兄弟們,看圖理解什么是鏈表的回文結(jié)構(gòu):
回文結(jié)構(gòu):正著讀12 -> 23 ->34,倒著讀12->23->34
奇數(shù)偶數(shù)都可以:
問(wèn)題分析:
要判斷是不是回文結(jié)構(gòu),那么我們就要遍歷鏈表,一個(gè)從前往后走,一個(gè)從后往前走,對(duì)應(yīng)的val值要相同,那么我們就必須修改鏈表的指向,這里就要用到快慢指針幫我們找到中間的節(jié)點(diǎn),從中間節(jié)點(diǎn)開始改變指向,指向變更完成之后再開始遍歷。
問(wèn)題講解:
第一步:為了確保始終能找到我們的鏈表,定義一個(gè)head變量一直指向頭節(jié)點(diǎn)。
第二步:定義兩個(gè)變量,開始都指向head,通過(guò)快慢指針的方法求出中間節(jié)點(diǎn)。
第三步:定義一個(gè)cur變量指向中間節(jié)點(diǎn)的后面一個(gè)節(jié)點(diǎn),讓cur變量來(lái)修改指向。
第四步:定義一個(gè)curNext變量等于cur.Next,防止改變指向后無(wú)法找到后面的節(jié)點(diǎn)。
代碼實(shí)現(xiàn):
public boolean chkPalindrome(ListNode head) { if(head == null) return false;//判斷一下鏈表是不是空,空的話直接返回false ListNode fast = head;//快指針fast,初始等于head ListNode slow = head;//慢指針slow,初始等于head while(fast != null && fast.next != null){//如果鏈表是奇數(shù),fast.next == null停下,如果鏈表是偶數(shù)fast == null停下 fast = fast.next.next;//fast走兩步 slow = slow.next;//slow走一步 } ListNode cur = slow.next;//cur等于slow的下一個(gè)節(jié)點(diǎn) while(cur != null){//cur不為空開始反轉(zhuǎn) ListNode curNext = cur.next;//curNext等于cur的下一個(gè)節(jié)點(diǎn) cur.next = slow;//開始反轉(zhuǎn) slow = cur;//反轉(zhuǎn)完了后讓slow等于cur cur = curNext;//cur再往后走一步。 } while(head != slow){//判斷是不是回文結(jié)構(gòu) if(head.val != slow.val){//不是回文結(jié)構(gòu) return false; } if(head.next == slow){//偶數(shù)鏈表的情況 return true; } head = head.next; slow = slow.next; } return true; }
鏈表面試題二
輸入兩個(gè)鏈表,找出它們的第一個(gè)公共結(jié)點(diǎn)。
問(wèn)題描述:
問(wèn)題分析:
判斷:
1.如果兩個(gè)鏈表是相交那么是Y還是X形狀? Y
2.如果兩個(gè)鏈表相交,值val域相同還是next域相同? next域相同
上圖就是相交的鏈表。
問(wèn)題講解:
第一步:先定義兩個(gè)字節(jié)變量分別指向兩個(gè)鏈表的頭,headA和headB。
第二步:定義兩個(gè)變量求出兩條鏈表的差值。
第三步:再定義兩個(gè)字節(jié)變量ps和pl分別指向headA和headB。
第四步:讓長(zhǎng)的鏈表先走他們的差值步。
第五步:兩個(gè)鏈表再一起走。
第六步:當(dāng)ps=pl的時(shí)候就是共同節(jié)點(diǎn)了。
代碼實(shí)現(xiàn):
public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if(headB == null || headA == null) return null;//判斷其中一條鏈表的頭節(jié)點(diǎn)為空就是沒(méi)有焦點(diǎn) ListNode ps = headA; ListNode pl = headB; int lenA = 0; int lenB = 0; while(ps != null){求出ps鏈表的長(zhǎng)度 lenA++; ps = ps.next; } ps = headA;//讓ps重新等于頭節(jié)點(diǎn) while(pl != null){求出pl鏈表的長(zhǎng)度 lenB++; pl = pl.next; } pl = headB;//讓pl重新等于頭節(jié)點(diǎn) int len = lenA - lenB; if(len < 0){//判斷ps長(zhǎng)還是pl長(zhǎng) ps = headB; pl = headA; len = lenB - lenA; } while(len != 0)//求兩條鏈表的差值 ps = ps.next; len--; } while(ps != pl){ ps = ps.next; pl = pl.next; } return ps; }
到此這篇關(guān)于Java 深入分析鏈表面試實(shí)例題目的文章就介紹到這了,更多相關(guān)Java 鏈表 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java使用單向鏈表解決數(shù)據(jù)存儲(chǔ)自定義排序問(wèn)題
- Java?詳細(xì)分析四個(gè)經(jīng)典鏈表面試題
- Java?精煉解讀數(shù)據(jù)結(jié)構(gòu)的鏈表的概念與實(shí)現(xiàn)
- 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?鏈表實(shí)戰(zhàn)真題訓(xùn)練
相關(guān)文章
詳解jenkins自動(dòng)部署springboot應(yīng)用的方法
這篇文章主要介紹了詳解jenkins自動(dòng)部署springboot應(yīng)用的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08教你如何精準(zhǔn)統(tǒng)計(jì)出你的接口"QPS"
今天小編就為大家分享一篇關(guān)于QPS的精準(zhǔn)計(jì)算方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2021-08-08使用java的milo框架訪問(wèn)OPCUA服務(wù)的過(guò)程
這篇文章主要介紹了使用java的milo框架訪問(wèn)OPCUA服務(wù)的方法,本次采用KEPServerEX5模擬服務(wù)端,使用milo開發(fā)的程序作為客戶端,具體操作使用過(guò)程跟隨小編一起看看吧2022-01-01idea每次新打開的項(xiàng)目窗口maven都要重新設(shè)置問(wèn)題
這篇文章主要介紹了idea每次新打開的項(xiàng)目窗口maven都要重新設(shè)置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11IDEA創(chuàng)建Java?Web項(xiàng)目的超詳細(xì)圖文教學(xué)
IDEA是程序員們常用的java集成開發(fā)環(huán)境,也是被公認(rèn)為最好用的java開發(fā)工具,下面這篇文章主要給大家介紹了關(guān)于IDEA創(chuàng)建Java?Web項(xiàng)目的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型方法步驟
Elasticsearch存儲(chǔ)數(shù)據(jù)之前需要先創(chuàng)建索引,類似于結(jié)構(gòu)型數(shù)據(jù)庫(kù)建庫(kù)建表,創(chuàng)建索引時(shí)定義了每個(gè)字段的索引方式和數(shù)據(jù)類型,這篇文章主要給大家介紹了關(guān)于ElasticSearch創(chuàng)建后索引修改數(shù)據(jù)類型的方法步驟,需要的朋友可以參考下2023-09-09SpringCloud Gateway網(wǎng)關(guān)功能介紹與使用
SpringCloud Gateway 是 Spring Cloud 的一個(gè)全新項(xiàng)目,它旨在為微服務(wù)架構(gòu)提供一種簡(jiǎn)單有效的統(tǒng)一的 API 路由管理方式。這篇文章主要介紹了SpringCloud Gateway網(wǎng)關(guān)作用,需要的朋友可以參考下2022-12-12