LeetCode 86. 分隔链表(中)
典型的双指针问题,写出AC的代码之后,先对照题解找区别,再优化。
题目
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例
示例:
# 考察知识点1
2输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
双指针
核心思想
方法一、三指针 思想很简单
使用 p
指针进行遍历,small
指针跟踪保存较小的那一部分,big
指针跟踪保存较大的那一部分。
一次遍历结束之后,将 small
和 big
拼接返回即可,注意,由于可能出现数字0,所以判断 small
或 big
部分非空的条件不是 if samll.val
而是 small.val != None
。
Python版本
1 |
|
时间复杂度:\(O(n)\),循环一遍。
空间复杂度:\(O(1)\),只是用了常数级别的额外空间,几个指针。
执行用时 :36 ms, 在所有 Python3 提交中击败了80.22%的用户
内存消耗 :13.6 MB, 在所有 Python3 提交中击败了5.88%的用户
浪费时间改出来一个简洁度、效率都不好的版本
1 |
|
时间复杂度:\(O(n)\),循环一遍。
空间复杂度:\(O(1)\),只是用了常数级别的额外空间,几个指针。
执行用时 :52 ms, 在所有 Python3 提交中击败了21.76%的用户
内存消耗 :13.6 MB, 在所有 Python3 提交中击败了5.88%的用户
- LeetCode官方答案
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!