【編程題】鏈表分割

牛客網做題鏈接:https://www.nowcoder.com/questionTerminal/0e27e0b064de4eacac178676ef9c9d70

題目描述

  編寫代碼,以給定值x爲基準將鏈表分割成兩部分,所有小於x的結點排在大於或等於x的結點之前
  給定一個鏈表的頭指針 ListNode* pHead,請返回重新排列後的鏈表的頭指針。注意:分割以後保持原來的數據順序不變。

畫圖解析

在這裏插入圖片描述
執行流程:
在這裏插入圖片描述

代碼

import java.util.*;
 
/*
public class ListNode {
    int val;
    ListNode next = null;
 
    ListNode(int val) {
        this.val = val;
    }
}*/
public class Partition {
    public ListNode partition(ListNode pHead, int x) {
        // write code here
        // 小於x的節點的頭
        ListNode minHead = new ListNode(-1);
        // 小於x的節點的尾
        ListNode min = minHead;
        // 大於或等於x的節點
        ListNode maxHead = new ListNode(-1);
        // 大於或等於x的節點的尾
        ListNode max = maxHead;
        // 用於循環遍歷鏈表
        ListNode cur = pHead;
        while(cur != null){
            if(cur.val < x){
                min.next = cur;
                min = min.next;
            }
            else{
                max.next = cur;
                max = max.next;
            }
            cur = cur.next;
        }
        // 將大於等於x的鏈表掛在小於x的鏈表
        min.next = maxHead.next;
        // 鏈表尾置爲null
        max.next = null;
        return minHead.next;
    }
}

牛客網在線oj執行結果:
在這裏插入圖片描述

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