86. 分隔链表

  1. /**
  2. * Definition for singly-linked list.
  3. * type ListNode struct {
  4. * Val int
  5. * Next *ListNode
  6. * }
  7. */
  8. func partition(head *ListNode, x int) *ListNode {
  9. // 遍历链表将所有小于x的节点摘下, 连接成为一个新的链表
  10. // 再将两个链表连接起来
  11. var preHead = new(ListNode)
  12. preHead.Next = head
  13. var List = new(ListNode)
  14. pre := preHead
  15. p := preHead.Next
  16. cur := List
  17. for p != nil {
  18. if p.Val < x {
  19. node := p
  20. p = p.Next
  21. pre.Next = p
  22. node.Next = cur.Next
  23. cur.Next = node
  24. cur = cur.Next
  25. } else {
  26. pre = pre.Next
  27. p = p.Next
  28. }
  29. }
  30. cur.Next = preHead.Next
  31. return List.Next
  32. }