jd0204.分割链表

题目描述

编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。

示例:

1
2
输入: head = 3->5->8->5->10->2->1, x = 5
输出: 3->1->2->10->5->5->8

题解

双指针

每遍历到一个小于目标值的数, 就把该节点放到链表头部

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public ListNode partition(ListNode head, int x) {
if (head == null)
return null;

ListNode dummy = new ListNode(0);
ListNode pre = head;
ListNode cur = pre.next;
dummy.next = head;

while (cur != null) {
if (cur.val < x) {
pre.next = cur.next;
cur.next = dummy.next;
dummy.next = cur;
cur = pre.next;
}else {
cur = cur.next;
pre = pre.next;
}
}
return dummy.next;
}
-------------本文结束感谢您的阅读-------------
可以请我喝杯奶茶吗