【题目】
给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。
【进阶题目】
在原问题的要求之上再增加如下两个要求:
- 在左、中、右三个部分的内部也做顺序要求,要求每部分里的节点从左到右的顺序与原链表中节点的先后次序一致。
- 如果链表长度为N,要求时间复杂度O(N),空间复杂度O(1)。
【基本思路】
原问题。将所有的节点放置到一个数组中,对这个数组进行partition调整(快排调整过程),再将每个数组中每个节点串起来即可。
#python3.5
def listPartition(head, pivot):
def partition(nodeArr, pivot):
left = -1
right = len(nodeArr)
index = 0
while index < right:
if nodeArr[index].val < pivot:
left += 1
nodeArr[left], nodeArr[index] = nodeArr[index], nodeArr[left]
index += 1
elif nodeArr[index].val =&