Java leetcode&NC 链表分割
程序员文章站
2022-03-29 21:32:40
题目描述编写程序以 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)链接:NC链表分割 Le...
题目描述
编写程序以 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)
链接:NC链表分割
LeetCode分割链表
实现代码
public ListNode partition(ListNode pHead, int x) {
if(pHead == null){
return null;
}
ListNode cur = pHead;
ListNode bs = new ListNode(-1);
ListNode be = bs;
ListNode as = new ListNode(-1);
ListNode ae = as;
while(cur != null){
if(cur.val < x){
be.next = cur;
be = be.next;
}else{
ae.next = cur;
ae = ae.next;
}
cur = cur.next;
}
//判断bs指向结点的指针域是否为空,为空则表明前半段没有结点
if(bs.next == null){
return as.next;
}
//前半段最后一个结点的指针域放置后半段链表的头指针
be.next = as.next;
//as指向结点的指针域象不为空表明链表后半段有结点,一定要将链表最后结点指针域置空
if(as.next != null){
ae.next = null;
}
//返回新的链表头指针
return bs.next;
}
牛客&力扣运行结果:
本文地址:https://blog.csdn.net/weixin_44874269/article/details/112529574