旋轉連結串列
開頭:
對於連結串列的建立已經熟悉,那我們現在講講旋轉連結串列的如何實現,當然旋轉連結串列的建立是在已經掌握普通連結串列的基礎上講解。
正文:
旋轉連結串列,顧名思義就是讓連結串列“動起來”。即:使連結串列尾部最後的結點轉到連結串列首部的位置。假設已經建立好一條6個結點的連結串列,它的初始狀態如下圖:
我們讓他旋轉兩次就變成了這樣,其過程是這樣的,先讓103到首部,然後再讓22到首部,這樣就是旋轉兩次後的結果。
如果我們讓其旋轉 k次,$k = 2*10^{12}$,最後的結果是怎樣的呢?即,k mod n,其中n是連結串列結點的個數。
下面我們來看程式碼:
void Linklist::Revolve(int ck,int cmaxn)
{
count = 0;
int count2 = 0;
//建立四個指標
Node *q1 = new Node;
Node *q2 = new Node;
Node *q3 = new Node;
Node *q4 = new Node;
q1 = first->next;
q2 = first->next;
q3 = first->next;
q4 = first->next;
int temp = cmaxn - ck;
//q1的變化
while(count != temp )
{
count++;
q1 = q1->next;
}
//q2的變化
q2 = q1;
while(count2 != ck - 1)
{
count2++;
q2 = q2->next;
}
//q3的變化
count = 0;
while(count != temp - 1)
{
count++;
q3 = q3->next;
}
q3->next = q2->next;
first->next = q1;
q2->next = q4;
}
上圖中的圖就是程式碼中的4個指標。指標指向的變化如下圖:
、