本文共 899 字,大约阅读时间需要 2 分钟。
struct ListNode {
int val;ListNode *next;ListNode(int x) : val(x), next(NULL) {}};class Solution {
public:void reorderList(ListNode *head) {if (!head || !head->next) {return;}// 大神思路:逆序插入法 // 首先记录所有节点的值,方便随机访问 vector values; ListNode *ptr = head; while (ptr != nullptr) { values.push_back(ptr->val); ptr = ptr->next; } // 双指针遍历,逐步重组奇偶位置 int left = 0, right = values.size() - 1; ptr = head; while (left <= right) { // 处理当前位置为奇数的情况 if ((left - right) % 2 == 0) { ptr->val = values[left++]; } else { ptr->val = values[right--]; } ptr = ptr->next; } }
};
classifiers标题为“单链表排序算法”,内容描述着大神思路,该方法通过逆序插入法来优化链表排序的效率。该算法首先将所有节点的值存储在一个向量中,然后通过双指针操作将节点逐一插入到正确的位置。这种方法的复杂度为O(n), 且空间复杂度为O(1)。该方法的效率优于前面的错误解法,且在处理单链表排序任务时表现出色。”此优化后的版本保留了技术文档的核心内容,但更加简洁直观。
转载地址:http://uxgyk.baihongyu.com/