当链表遍历时,每次节点的next需要指向空时,用如下方法
设置一个临时节点,存储head 的下一节点,然后head.next=null
最后再把next赋值给head;
/**
* https://leetcode-cn.com/problems/partition-list/
* 86. 分隔链表
* 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
* <p>
* 你应当保留两个分区中每个节点的初始相对位置。
* <p>
* 示例:
* <p>
* 输入: head = 1->4->3->2->5->2, x = 3
* 输出: 1->2->2->4->3->5
*
* @param head
* @param x
* @return
*/
public static ListNode partition(ListNode head, int x) {
//定义两个区域的头尾节点,找到这四个节点,然后串起来
ListNode sHead = null;
ListNode sTail = null;
ListNode egHead = null;
ListNode egTail = null;
//遍历整个连标的
ListNode next;
while (head != null) {
next = head.next;
head.next = null;
//寻找小于区域的头尾
if (head.val < x) {
if (sHead == null) {
sHead = head;
sTail = head;
} else {
sTail.next = head;
sTail = head;
}
} else {
//寻找大于等于区域的头尾
if (egHead == null) {
egHead = head;
egTail = head;
} else {
egTail.next = head;
egTail = head;
}
}
head = next;
}
if (sTail != null) {
sTail.next = egHead;
return sHead;
} else {
return egHead;
}
}