给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = 1,4,3,2,5,2, x = 3 输出:1,2,2,4,3,5
示例 2:
输入:head = 2,1, x = 2 输出:[1,2]
提示:
- 链表中节点的数目在范围
[0, 200]
内 -100 <= Node.val <= 100
-200 <= x <= 200
Java:(说明:这道题很简单,不用链表也可以实现;只是了解下链表的实现过程):
package com.company;
import java.util.Scanner;
public class LInkLIstTest {
//初始化链表,防止链表为null时赋值报错
static LinkNode head=new LinkNode(0);
//为链接增加节点
public static void addNode(LinkNode node){
LinkNode temp=head;
while(temp.next!=null){
temp=temp.next;
}
temp.next=node;
}
public static void main(String[] args){
Scanner in =new Scanner(System.in);
LinkNode returnTotal;
String m=in.nextLine();
String n=in.nextLine();
String[] data=m.split(",");
int x=Integer.parseInt(n);
int i=0;
while(i<data.length){
int num=Integer.parseInt(data[i]);
addNode(new LinkNode(num));
i++;
}
returnTotal=partition(head.next,x);
while(returnTotal!=null){
System.out.print(returnTotal.val+" ");
returnTotal=returnTotal.next;
}
}
//实现小于x的数据放前,大于x的数据放后面
static LinkNode partition(LinkNode head,int x){
LinkNode small=new LinkNode(0);
LinkNode smallhead=small;
LinkNode large=new LinkNode(0);
LinkNode largehead=large;
while(head!=null){
if(head.val<x){
small.next=head;
small=small.next;
}else{
large.next=head;
large=large.next;
}
head=head.next;
}
large.next=null;
small.next=largehead.next;
return smallhead.next;
}
//单向链表类
static class LinkNode{
int val=0;
LinkNode next;
LinkNode(int val){
this.val=val;
}
LinkNode(int val,LinkNode next){
this.val=val;
this.next=next;
}
}
}
输入输出如下: