86. 分隔連結串列(Java)
86. 分隔連結串列
給你一個連結串列和一個特定值 x ,請你對連結串列進行分隔,使得所有小於 x 的節點都出現在大於或等於 x 的節點之前。
你應當保留兩個分割槽中每個節點的初始相對位置。
思路:
該連結串列沒有頭結點,加上一個頭結點方便插入和刪除
遍歷連結串列(結束條件為p!=null)
1)找到第一個不小於x的節點X並記錄位置
2)X前的所有節點不需要改變
3)X後所有值小於x的節點均需按照與按原順序插入到節點X之前
時間複雜度:遍歷一次連結串列 O(N)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
//找到第一個>=x的節點位置P,將其後<=x的節點按照原來的順序插入P之前
//該連結串列不包含頭結點,先給該連結串列加一個頭結點方便插入
ListNode new_head=new ListNode(Integer.MAX_VALUE);
new_head.next=head;
ListNode pre=new_head,p=new_head.next;
while(p!=null && p.val<x) {
pre=p;
p=p.next;
}
ListNode new_pre=pre,new_p=p;
while(new_p!=null) {
if (new_p.val<x) {
//將當前節點插入到第一個>=x的節點之前
new_pre.next=new_p.next;
pre.next=new_p;
new_p.next=p;
//更新第一個>x節點的前驅節點
pre=pre.next;
//繼續向後遍歷
new_p=new_pre.next;
continue;
}
new_pre=new_p;
new_p=new_p.next;
}
return new_head.next;
}
}
相關文章
- LeetCode 86. 分隔連結串列LeetCode
- 力扣 leetcode 86. 分隔連結串列力扣LeetCode
- 2021-01-03 | 86. 分隔連結串列
- 【1月打卡~Leetcode每日一題】86. 分隔連結串列(難度:中等)LeetCode每日一題
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- LeetCode 86 ——分隔連結串列LeetCode
- 環形連結串列_相交連結串列_多數元素(java語言)Java
- 連結串列-迴圈連結串列
- 連結串列-雙向連結串列
- 連結串列 - 單向連結串列
- #反轉連結串列_C++版 #反轉連結串列_Java版 @FDDLCC++Java
- JAVA資料結構之連結串列Java資料結構
- Java版-資料結構-連結串列Java資料結構
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 連結串列-雙向通用連結串列
- java實現連結串列反轉Java
- java實現雙向連結串列Java
- 連結串列-雙向非通用連結串列
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 連結串列入門與插入連結串列
- Leetcode_86_分割連結串列_連結串列LeetCode
- 資料結構-單連結串列、雙連結串列資料結構
- 連結串列
- leetcode 234.迴文連結串列 JavaLeetCodeJava
- 圖解雙連結串列(Java實現)圖解Java
- Java實現連結串列帶註釋Java
- 演算法與資料結構-連結串列((linked-list)-Java實現單向連結串列演算法資料結構Java
- 單連結串列建立連結串列出現問題
- **203.移除連結串列元素****707.設計連結串列****206.反轉連結串列**
- 連結串列逆序
- 2、連結串列
- 連結串列(python)Python
- 重排連結串列
- (一)連結串列
- 分割連結串列
- 單連結串列
- php連結串列PHP