题目:
编写程序以 x 为基准分割链表,使得所有小于 x 的节点排在大于或等于 x 的节点之前。如果链表中包含 x,x 只需出现在小于 x 的元素之后(如下所示)。分割元素 x 只需处于“右半部分”即可,其不需要被置于左右两部分之间。
示例:
输入: head = 3->5->8->5->10->2->1, x = 5
输出: 3->1->2->10->5->5->8来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/partition-list-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题解:
只需要遍历链表的所有节点,小于x的放到一个小的链表中,大于等于x的放到一个大的链表中,最后再把这两个链表串起来即可。
public ListNode partition(ListNode head, int x) {
//小的链表的首元节点和头节点
ListNode small = new ListNode(0);
ListNode smallHead = small;
//大的链表的首元节点和头节点
ListNode large = new ListNode(0);
ListNode larageHead = large;
//遍历head链表
while(head != null){
//判断head链表中值
if(head.val < x){
//如果值比x小,则将它放到小的链表
small.next = head;
small = small.next;
}else{
//如果值大于等于x,则将它放到大的链表
large.next = head;
large = large.next;
}
//继续循环下一个head节点
head = head.next;
}
//将大小两个链表合并
large.next = null;
small.next = larageHead.next;
return smallHead.next;
}