乾貨滿滿!!!面試必備OJ題:連結串列篇(一)
1、反轉一個單連結串列
示例:
輸入: 1->2->3->4->5->NULL
輸出: 5->4->3->2->1->NULL
class Solution {
public ListNode reverseList(ListNode head) {
ListNode newHead = null;
ListNode cur = head;
ListNode prev = null;
while(cur != null) {
ListNode curNext = cur.next;
if(curNext == null) {
newHead = cur;
}
cur.next = prev;
prev = cur;
cur = curNext;
}
return newHead;
}
}
2、連結串列的中間節點
給定一個頭結點為 head 的非空單連結串列,返回連結串列的中間結點。
如果有兩個中間結點,則返回第二個中間結點。
示例1:
輸入:[1,2,3,4,5]
輸出:3
示例2:
輸入:[1,2,3,4,5,6]
輸出:4 (由於該列表有兩個中間結點,值分別為 3 和 4,我們返回第二個結點。)
class Solution {
public ListNode middleNode(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
return slow;
}
}
3、迴文連結串列
示例 1:
輸入: 1 2
輸出: false
示例 2:
輸入: 1 2 2 1
輸出: true
class Solution {
public boolean isPalindrome(ListNode head) {
if(head == null) {
return true;
}
if(head.next == null) {
return true;
}
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
}
//slow就是中間位置,開始進行第二步
//2、進行反轉
ListNode cur = slow.next;
while(cur != null) {
ListNode curNext = cur.next;
cur.next = slow;
slow = cur;
cur = curNext;
}
//3、開始判斷
while(head != slow) {
if(head.val != slow.val) {
return false;
}
//偶數情況下
if(head.next == slow) {
return true;
}
head = head.next;
slow = slow.next;
}
return true;
}
}
4、判斷連結串列是否有環
給定一個連結串列,判斷連結串列中是否有環。
如果連結串列中存在環,則返回 true 。 否則,返回 false。
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if(fast == slow) {
break;
}
}
if(fast == null || fast.next == null) {
return false;
}
return true;
}
}
5、環形連結串列
給定一個連結串列,返回連結串列開始入環的第一個節點。 如果連結串列無環,則返回 null。
public class Solution {
public ListNode detectCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if(fast == slow) {
break;
}
}
if(fast == null || fast.next == null) {
return null;
}
slow = head;
while(slow != fast) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
}
6、刪除重複節點
在一個排序的連結串列中,存在重複的結點,請刪除該連結串列中重複的結點,重複的結點不保留,返回連結串列頭指標。
public ListNode deleteDuplicates(ListNode head) {
ListNode cur = head;
ListNode newHead = new ListNode(-1);
ListNode tmp = newHead;
while(cur != null) {
if(cur.next != null && cur.val == cur.next.val) {
while(cur.next != null && cur.val == cur.next.val) {
cur = cur.next;
}
cur = cur.next;
}else {
tmp.next = cur;
tmp = tmp.next;
cur = cur.next;
}
}
tmp.next = null;
return newHead.next;
}
7、分隔連結串列
給定一個連結串列和一個特定值 x,對連結串列進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。
示例:
輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5
//暴力解法
class Solution {
public ListNode partition(ListNode head, int x) {
ListNode bs = null;
ListNode be = null;
ListNode as = null;
ListNode ae = null;
ListNode cur = head;
while(cur != null) {
if(cur.val < x) {
if(bs == null) {
bs = cur;
be = cur;
}else {
be.next = cur;
be = be.next;
}
}else {
if(as == null) {
as = cur;
ae = cur;
}else {
ae.next = cur;
ae = ae.next;
}
}
cur = cur.next;
}
if(bs == null) {
return as;
}
//bs!=null;
be.next = as;
if(as != null) {
ae.next = null;
}
return bs;
}
}
相關文章
- 一份資料工程師必備的學習資源,乾貨滿滿(附連結)工程師
- 面試必備的「反轉連結串列」面試
- 【乾貨滿滿】1.5w字初中級前端面試複習總結前端面試
- 【LeetCode-連結串列】面試題-反轉連結串列LeetCode面試題
- 連結串列專題——面試中常見的連結串列問題面試
- 【圖解連結串列類面試題】移除連結串列元素圖解面試題
- 【圖解連結串列類面試題】環形連結串列圖解面試題
- 《青空之刃》前哨測試:乾貨福利滿滿的線下之旅
- 乾貨滿滿,騰訊雲+社群技術沙龍 Kafka Meetup 深圳站圓滿結束Kafka
- 乾貨滿滿的 Go Modules 和 goproxy.cnGo
- 非凸科技&CSDN,線上直播,乾貨滿滿
- GopherChina 2021 定了,乾貨滿滿的來了Go
- Jeff Dean執筆谷歌團隊2017年終總結,乾貨滿滿谷歌
- Java面試題-基礎篇三(乾貨)Java面試題
- 一個node連結串列翻轉的面試題面試題
- 2024/12/1 【連結串列】 LeetCode 面試題 02.07. 連結串列相交LeetCode面試題
- 又跳槽!3年Java經驗收割成都大廠的面試心得(乾貨滿滿&文末有福利)Java面試
- 演算法面試(一) 連結串列演算法面試
- 搞懂單連結串列常見面試題面試題
- 2019 DevOps 必備面試題——持續整合篇dev面試題
- 乾貨滿滿!10分鐘看懂Docker和K8SDockerK8S
- Golang進階,揉碎資料庫中介軟體,乾貨滿滿!Golang資料庫
- 程式設計師面試備戰篇:18個經典MySQL面試專題解析(乾貨分享答案)程式設計師面試MySql
- java面試題總結(開發者必備)Java面試題
- [演算法總結] 17 題搞定 BAT 面試——連結串列題演算法BAT面試
- 去騰訊面試了,我自信滿滿!面試
- 面試必備,Linux面試題和答案!Linux面試題
- 乾貨滿滿!深入解析增強分析的概念及其優勢
- ES6的概念以及執行環境~滿滿的乾貨
- 面試題35:複雜連結串列的複製面試題
- 如何做抖音自媒體?這些小技巧一定要掌握,乾貨滿滿
- 淚流滿面的 11 個 Git 面試題Git面試題
- 【FAQ】乾貨滿滿,接入HMS Core應用內購買服務過程中一些常見問題總結(2)來啦
- 推薦系統演算法合集,滿滿都是乾貨(建議收藏)演算法
- 【乾貨滿滿】貝塞爾曲線(Bézier curve)——什麼神仙操作
- 資料結構和演算法面試題系列—連結串列資料結構演算法面試題
- 【乾貨集】超全的滲透測試面試題總結!面試題
- 面試必備問題集錦面試