题目:
对于一个链表,我们需要用一个特定阈值完成对它的分化,使得小于等于这个值的结点移到前面,大于该值的结点在后面,同时保证两类结点内部的位置关系不变。
给定一个链表的头结点head,同时给定阈值val,请返回一个链表,使小于等于它的结点在前,大于等于它的在后,保证结点值不重复。
测试用例:
input:{1,4,2,5},3output:{1,2,4,5}
思路:
用两个链表分别保存小于等于val的结点和大于val的结点,最后拼接起来即可。注意链表末尾是需要取空的,否则会成环。
代码:
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Divide:
def listDivide(self, head, val):
# write code here
equal = ListNode(0) #记录小于等于val的结点的链表
e_cur = equal #equal的尾结点
great = ListNode(0) #记录大于val的结点的链表
g_cur = great #great的尾结点
while head:
if head.val <= val:
e_cur.next = head
e_cur = e_cur.next
else:
g_cur.next = head
g_cur = g_cur.next
head = head.next
e_cur.next = great.next
g_cur.next = None #最后一个结点的next需要置空
return equal.next