这个题想起来不难 就是需要注意细节
linkedlist 题都需要一个dummy head 来记录新的head dummy head永远next指向新的 head, 需要一个位置指针初始化的时候和dummy 一样 然后在后面某次移动这个位置指针的时候 dummy也就被移动到了正确的head 返回值就是dummy.next
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode partition(ListNode head, int x) {
if ( head == null || head.next == null )
return head;
ListNode temp = head;
ListNode pos = new ListNode(0);
pos.next = head;
ListNode prev = pos;
ListNode dummyHead = pos;
while ( temp != null ){
if ( temp.val < x ){
if (pos.next != temp ){
prev.next = temp.next;
ListNode posNext = pos.next;
pos.next = temp;
temp.next = posNext;
pos = pos.next;
temp = prev.next;
}
else{
pos = pos.next;
temp = temp.next;
prev = prev.next;
}
}
else{
temp = temp.next;
prev = prev.next;
}
}
return dummyHead.next;
}
}

本文介绍了一种链表分区算法的实现方法,通过使用虚拟头节点简化边界条件处理,并详细解释了如何根据阈值对链表元素进行重新排列的过程。
173

被折叠的 条评论
为什么被折叠?



