题目描述
描述
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
如:输入 head = 1->4->3->2->5->2, x = 3
输出 1->2->2->4->3->5
思路
1.创建两个新链表left与right,left放<x的结点,right放>=x的结点
2.全部放入完成后,left的尾结点连接right的头节点。
代码实现
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) {
//创建两个新链表,一个放<x的,一个放>=x的
ListNode left = new ListNode(0);
ListNode curLeft = left;//遍历left
ListNode right = new ListNode(0);
ListNode curRight = right;//遍历right
//遍历pHead链表,判断大小
while(pHead != null) {
if(pHead.val < x) {
//放入curLeft
curLeft.next = pHead;
curLeft = curLeft.next;
pHead = pHead.next;
//为了最后一个节点.next为null
curLeft.next = null;
}else {
//放入curright
curRight.next = pHead;
curRight = curRight.next;
pHead = pHead.next;
//为了最后一个节点.next为null
curRight.next = null;
}
}
//left尾结点 连接 right头节点
curLeft.next = right.next;
return left.next;
}
}