[Leetcode][python]Partition List

来源:互联网 发布:自学编程先看什么书 编辑:程序博客网 时间:2024/06/01 07:33

题目大意

给定一个链表以及一个目标值,把小于该目标值的所有节点都移至链表的前端,大于或等于目标值的节点移至链表的尾端,同时要保持这两部分在原先链表中的相对位置。

解题思路

此题并不难,并且可以帮助理解链表。
两个指针,一个负责收集比目标小的,一个收集大于等于目标的。

代码

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

总结

原创粉丝点击