1.双指针法

1.双指针法 before链表用来存放比x小的节点,after节点用来存放比x大的节点。注意要设置头节点,因为这样可以减少判断条件

  1. /*
  2. * @lc app=leetcode.cn id=86 lang=javascript
  3. *
  4. * [86] 分隔链表
  5. */
  6. // @lc code=start
  7. /**
  8. * Definition for singly-linked list.
  9. * function ListNode(val) {
  10. * this.val = val;
  11. * this.next = null;
  12. * }
  13. */
  14. /**
  15. * @param {ListNode} head
  16. * @param {number} x
  17. * @return {ListNode}
  18. */
  19. var partition = function (head, x) {
  20. let beforeHead = (before = new ListNode())
  21. let afterHead = (after = new ListNode())
  22. while (head) {
  23. if (head.val < x) {
  24. before.next = head
  25. before = before.next
  26. } else {
  27. after.next = head
  28. after = after.next
  29. }
  30. head = head.next
  31. }
  32. after.next = null
  33. before.next = afterHead.next
  34. return beforeHead.next
  35. }
  36. // @lc code=end