题意:给出一个单链表,有参数的数x。将比x小的数排在比x大的数据后面
思路:类似于快速排序的分段处理。为了简单操作,在单链表前加个头结点。注意,在处理时,如果当前处理结点与被替换结点为同一结点结,两个都下移,否则会出现环
代码如下:
class Solution
{
public ListNode partition(ListNode head, int x)
{
if (null == head || null == head.next) return head;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode p = dummy, cur = dummy;
while (cur != null && cur.next != null)
{
if (cur.next.val < x)
{
if (cur == p)
{
p = p.next;
cur = cur.next;
continue;
}
ListNode tmp = cur.next;
ListNode next = p.next;
cur.next = cur.next.next;
p.next = tmp;
tmp.next = next;
p = p.next;
continue;
}
cur = cur.next;
}
return dummy.next;
}
}