前面寫了個鍊錶的歸併排序,這裡再寫個鍊錶的快排。
鍊錶的快排處理其實跟陣列的沒什麼區別,只是在partition要三位取中的話稍微煩一點;
#include#include#includeusing namespace std;
struct listnode
;typedef listnode ln;
ln* getlast(ln* head)
return last;
}ln* partition(ln* head,ln*& lhead,ln*& ltail,ln*& rhead,ln*& rtail)
else
head=head->next;
} btail->next=stail->next=null;
lhead=small.next;
if (lhead )
ltail=stail;
rhead=big.next;
if (rhead )
rtail=btail;
return piv;
}void quicksort(ln*& head,ln*& tail)
tail->next=piv;
tail=piv;
if ( rhead )
head=guard.next;
}ln* sortlist(ln* list)
int main()
{ int n;
while(cin>>n)
{ srand( (unsigned)time( null ) );
vectorlists(n);
for(int i=0;i
各種面試題 鍊錶相關
1.判斷是否有環 bool existcircle listnode head return false 2.找環的起始位置 這個在紙上畫個環就能看出相遇的地方到起始位置與表頭到起始位置的距離是相等的。所以相遇後把乙個放到頭去再相遇就好了。listnode findcirclestart listn...
面試題 快排挖坑法的應用
對乙個陣列按照給定的下標進行排序,僅僅使用兩兩交換的方式,要求不能對陣列進行擴容,盡可能少的額外空間。如 原陣列為a,b,c,d,e,現在給定的新位置為3,0,1,4,2,那麼排序後為d,a,b,e,c,void swapsort int parr,int ppos,int n 這是最近看到的一道面...
鍊錶操作面試題
include using namespace std struct node int value node next node find node phead,int t 一 刪除鍊錶中某個節點 思路 先找到要刪除的節點位置 bool deletet node phead,int t else e...