题目:
编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。
示例:
输入: head = 3->5->8->5->10->2->1, x = 5 输出: 3->1->2->10->5->5->8
个人思路:
定义两个指针分别放大于等于和小于的节点,遍历链表,将其分别放入对应的链表中,最后将两个链表进行拼接即可
代码:
/**
* 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) {
ListNode min=new ListNode(0);
ListNode minhead=min;
ListNode max=new ListNode(0);
ListNode maxhead=max;
while(head!=null){
if(head.val<x){
min.next=head;
head=head.next;
min=min.next;
}else{
max.next=head;
head=head.next;
max=max.next;
}
}
min.next=maxhead.next;
max.next=null;
return minhead.next;
}
}