题目大意
给定一个链表以及一个目标值,把小于该目标值的所有节点都移至链表的前端,大于或等于目标值的节点移至链表的尾端,同时要保持这两部分在原先链表中的相对位置。
解题思路
此题并不难,并且可以帮助理解链表。
两个指针,一个负责收集比目标小的,一个收集大于等于目标的。
代码
class Solution(object):
def partition(self, head, x):
"""
:type head: ListNode
:type x: int
:rtype: ListNode
"""
dummy = ListNode(-1)
dummy.next = head
small_dummy = ListNode(-1)
large_dummy = ListNode(-1)
# small_prev和large_prev往后遍历增加,small_dummy和large_dummy则负责最后作为返回头结点
small_prev = small_dummy
large_prev = large_dummy
while dummy.next: # head第一个节点
curr = dummy.next
if curr.val < x:
small_prev.next = curr
small_prev = small_prev.next
else:
large_prev.next = curr
large_prev = large_prev.next
dummy = dummy.next
large_prev.next = None # 最后指针置为none
small_prev.next = large_dummy.next # large_dummy对应的是大链表的第一个数
return small_dummy.next # 返回的是small_dummy