C語言重構【】
所有題目源代碼:Git地址
題目
給定一個鏈表和一個特定值 x,對鏈表進行分隔,使得所有小於 x 的節點都在大於或等於 x 的節點之前。
你應當保留兩個分區中每個節點的初始相對位置。
示例:
輸入: head = 1->4->3->2->5->2, x = 3
輸出: 1->2->2->4->3->5
方案:單鏈表
- 簡單題
/**
* 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) {
//xiao da
ListNode small = new ListNode(-1);
ListNode big = new ListNode(-1);
ListNode pSmall = small;
ListNode pBig = big;
while(head!=null){
if(head.val<x){
pSmall.next = head;
pSmall = pSmall.next;
}
else{
pBig.next = head;
pBig = pBig.next;
}
head = head.next;
}
pBig.next = null;
pSmall.next = big.next;
return small.next;
}
}
複雜度計算
- 時間複雜度:O(n),遍歷鏈表
- 空間複雜度:O(1)