牛客網做題鏈接: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執行結果: