题目:
给定一个单链表和一个x,把链表中小于x的放到前面,大于等于x的放到后面,每部分元素的原始相对位置不变。
思路:
遍历一遍链表,把小于x的结点都放在lesshead后,把大于等于x的都放到biggerhead后,最后再把大于等于的链表接在小于链表的后面。
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if(head==null)
return head;
ListNode lesshead=new ListNode(0);
ListNode biggerhead=new ListNode(0);
ListNode less=lesshead;
ListNode bigger=biggerhead;
ListNode temp = head;
while(temp!=null)
{
if(temp.val<x)
{
less.next=temp;
less=less.next;
temp=temp.next;
}else
{
bigger.next=temp;
bigger=bigger.next;
temp=temp.next;
}
}
bigger.next=null;
less.next=biggerhead.next;
return lesshead.next;
}
}