描述
现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。
思路:
首先,判空;
不为空时:
构建两个新链表,一个小的,一个大的
然后遍历链表cur为头结点,把小于x的插入到小的链表当中,大于等于x的插入到大的当中;
最后,把两个链表结合到一起,注意要把大的链表的最后一个next置为空。
代码:
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) {
if(pHead==null){
return null;
}
//构造两个新链表
ListNode lessHead=new ListNode(0);
ListNode tailL=lessHead;
ListNode greatHead=new ListNode(0);
ListNode tailG=greatHead;
//遍历链表,将小于x的往less插,大于的往great插
ListNode cur=pHead;
while(cur!=null){
if(cur.val<x){
tailL.next=cur;
tailL=cur;
}else{
tailG.next=cur;
tailG=cur;
}
cur=cur.next;
}
//将两个表拼接在一起
tailL.next=greatHead.next;
tailG.next=null;
return lessHead.next;
}
}