樂扣原題:
/**
* definition for singly-linked list.
* public class listnode
* }*/class solution
// 將鍊錶轉化為陣列
listlist = new arraylist<>();
while (null != head)
// 陣列遞增排序
collections.sort(list);
// 構造結果鍊錶
listnode root = new listnode(-1);
listnode cur = root;
for (integer val : list)
return root.next;
}}
/**
* definition for singly-linked list.
* public class listnode
* }*/class solution
return split(head);
}private listnode split(listnode node)
// 通過快慢指標,標記鍊錶的中間節點
listnode slow = node;
listnode fast = node.next;
while (null != fast && null != fast.next)
// 以中間節點將鍊錶一分為二,通過slow.next = null斷鏈
listnode pre = node;
listnode post = slow.next;
slow.next = null;
// 遞迴分解兩段鍊錶,直至不可再分(null/單節點)
listnode left = split(pre);
listnode right = split(post);
// 返回兩兩歸併結果
return merge(left, right);
}private listnode merge(listnode left, listnode right) else
cur = cur.next;
}if (null != left)
if (null != right)
return subresult.next;
}}
鍊錶 鍊錶排序 中等
描述 在 o n log n 時間複雜度和常數級的空間複雜度下給鍊錶排序。您在真實的面試中是否遇到過這個題?樣例給出 1 3 2 null,給它排序變成 1 2 3 null.挑戰分別用歸併排序和快速排序做一遍。題目鏈結 分析快速排序 演算法只交換節點的val值,平均時間複雜度o nlogn 不考慮...
鍊錶之排序鍊錶
148.排序鍊錶 力扣 leetcode leetcode cn.com 題目要求n logn 所以這邊考慮歸併排序 先分,再合,合的話就是合併兩個有序鍊錶,和合併兩個有序陣列一樣簡單 class solution listnode merge listnode l1,listnode l2 ptr...
python鍊錶 鍊錶重新排序
輸入 1 2 3 4 5 6 7 輸出 1 7 2 6 3 5 4 或者輸入 1 2 3 4 5 6 輸出 1 6 2 5 3 4 思路 1.將1 2 3 4 5 6 7分成 1 2 3 與 4 5 6 7,將後半部分逆序7 6 5 4 2.合併1 2 3與7 6 5 4 為1 7 2 6 3 5 ...