一、题目描述
编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前
给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。
二、解决思路
定义连个具有傀儡结点的链表smallHead和bigHead,将小于定值x的放在smallHead后边,其他放在bigHead后面。
三,具体代码
public class Solution {
static class ListNode{
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
public ListNode partition(ListNode pHead, int x) {
// 若链表位空直接返回null
if (pHead == null){
return null;
}
// 创建两个具有傀儡结点的链表,用来存放数值 x 两边的值
ListNode smallHead = new ListNode(-1);
ListNode bigHead = new ListNode(-1);
// 创建一个变量
ListNode cur = pHead;
ListNode smallCur = smallHead;
ListNode bigCur = bigHead;
while(cur != null){
if (cur.val < x){
ListNode newNode = new ListNode(cur.val);
smallCur.next = newNode;
smallCur = smallCur.next;
cur = cur.next;
}else{
ListNode newNode = new ListNode(cur.val);
bigCur.next = newNode;
bigCur = bigCur.next;
cur = cur.next;
}
}
// 将smallHead 放在左边,bigHead 放在右边
smallCur.next = bigHead.next;
return smallHead.next;
}
}