nowcoder 鍊錶的分化

2021-08-15 01:32:14 字數 1295 閱讀 1393

對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。

給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於等於它的結點在前,大於等於它的在後,保證結點值不重複。

測試樣例:

,3 用兩個臨時鍊錶記錄大於val和小於等於val的結點,最後連線結點。

# -*- coding:utf-8 -*-

# class listnode:

# def __init__(self, x):

# self.val = x

# self.next = none

class

divide:

deflistdivide

(self, head, val):

# write code here

small_head = none; small_tail = none

big_head = none; big_tail = none

while head:

if head.val <= val:

if small_head == none:

tmp = listnode(head.val)

small_head = tmp

small_tail = small_head

else:

tmp = listnode(head.val)

small_tail.next = tmp

small_tail = small_tail.next

elif head.val > val:

if big_head == none:

tmp = listnode(head.val)

big_head = tmp

big_tail = big_head

else:

tmp = listnode(head.val)

big_tail.next = tmp

big_tail = big_tail.next

head = head.next

head = none

if small_head:

head = small_head

if big_head:

small_tail.next = big_head

elif big_head:

head = big_head

return head

鍊錶分化問題

鍊錶分化問題為給定乙個閾值,使得小於等於這個閾值的結點移到前面,大於這個閾值的結點移到後面,同時保證兩類結點的內部位置關係不變。思路一 把鍊錶元素放到陣列中,利用快排思想進行排序,類似荷蘭國旗問題,但因為涉及到交換,不能保證同一類結點內部位置關係不變。思路二 將小於等於這個閾值的結點生成乙個鍊錶,大...

鍊錶的分化練習

對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於它的結點在前,大於它的在後,d等於它的節點在中間。保證結點值不重複。測試樣例 3 兩...

鍊錶演算法之鍊錶分化

對於乙個鍊錶,我們需要用乙個特定閾值完成對它的分化,使得小於等於這個值的結點移到前面,大於該值的結點在後面,同時保證兩類結點內部的位置關係不變。給定乙個鍊錶的頭結點head,同時給定閾值val,請返回乙個鍊錶,使小於等於它的結點在前,大於等於它的在後,保證結點值不重複。測試樣例 3 思路 新建兩個鍊...