leetcode鍊錶O(nlogn 排序

2021-07-22 06:49:14 字數 1199 閱讀 8158

這個題主要考察的是排序思想的應用,雖然可能大部分都知道陣列上的排序,但是如果用到鍊錶上,

可能有些人可能就會有人一時想不起來,這道題要求o(nlogn)的演算法,所以考慮快排,歸併,堆排,

堆排個人認為不怎麼好寫,這裡不做考慮,主要講一下快排,歸併,以及一種直接呼叫庫函式的寫法。

首先講一下最簡單的使用庫函式的方法,可以說是個投機取巧的方法,直接看**:

class solution 

vectorv;

for(listnode* p=head;p;p=p->next)

sort(v.begin(),v.end());

int i=0;

for(listnode* p=head;p;p=p->next)

return head;

}};

然後是快排的寫法,用了快排的思想,以及交換值:

class solution 

sortlist(head,null);

return head;

}void sortlist(listnode *head,listnode *tail)

listnode* partition(listnode *node,listnode *tail)

next=next->next;

}swap(cur->val,node->val);

return cur;

}};

歸併的話,主要是歸併的思想加上設定一快一慢倆個指標找到鍊錶的中點。

class solution 

listnode *fast=head->next,*slow=head;

while(fast!=null&&fast->next!=null)

listnode* head2=slow->next;

slow->next=null;

listnode *p1=sortlist(head);

listnode *p2=sortlist(head2);

listnode *p=merge(p1,p2);

return p;

}listnode* merge(listnode* p1,listnode* p2)

else

return phead;

}};

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2 輸出 false 示例 2 輸入 1 2 2 1 輸出 true 高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?head null 空鍊錶,回文,返回true head.next null 只有乙個節點的列表,回文,返回tru...

leetcode 鍊錶 回文鍊錶

請判斷乙個鍊錶是否為回文鍊錶。示例 1 輸入 1 2輸出 false示例 2 輸入 1 2 2 1輸出 true高階 你能否用 o n 時間複雜度和 o 1 空間複雜度解決此題?思路 利用快慢指標找到中間節點,當快指標走到末尾時,慢指標指向中間節點 交中間節點之後的節點進行鍊錶反轉 設定指標p1從h...

分隔鍊錶(鍊錶 LeetCode)

題目鏈結 給你乙個鍊錶和乙個特定值 x 請你對鍊錶進行分隔,使得所有小於 x 的節點都出現在大於或等於 x 的節點之前。你應當保留兩個分割槽中每個節點的初始相對位置。示例 輸入 head 1 4 3 2 5 2,x 3 輸出 1 2 2 4 3 5維護兩個鍊錶,乙個鍊錶儲存比x小的結點,另乙個鍊錶儲...