leetcode算法練習【86】分隔鏈表

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章