86. 分隔链表 public ListNode partition(ListNode head, int x) {
两道题一样
注意:这个题目不要求大于x的节点的输出的顺序 所以与预期结果不同也可以ac
双指针法
- 建立两个哑结点 afterhead beforehead作为两个链表的头节点
- 建立两个指针 after和before
- 当head不为空// 因为后续不使用原链表的head 所以直接用head当指针
- 如果head的val小于x
- before的next指向head
- before后移一个
- 如果head的val不小于x
- after的next指向head
- after后移一个
- head后移一个
- 如果head的val小于x
- after的next指向null
- before的next指向afterhead的next
- 返回beforehead的next
public ListNode partition(ListNode head, int x) {
ListNode before_head = new ListNode(0);
ListNode before = before_head;
ListNode after_head = new ListNode(0);
ListNode after = after_head;
while(head != null) {
if(head.val < x) {
before.next = head;
before = before.next;
} else {
after.next = head;
after = after.next;
}
head = head.next;
}
after.next = null;
before.next = after_head.next;
return before_head.next;
}