鍊錶翻轉和排序

2021-08-15 16:15:12 字數 1679 閱讀 9805

鍊錶的翻轉

鍊錶的節點由資料域與指標域構成,針對鍊錶的翻轉採用三個指標p,q,r,p指向頭結點,q指向p的下乙個節點,r指向q的下乙個節點,p,q,r三個指標遍歷整個鍊錶,將q = p->next 寫成q->next = p ,因此就將p指向q的指標反轉成q指向p。**如下:

#include 

#include

#include

using namespace std;

class node ;

class linklist

~linklist()

}//建立鍊錶

node*createlist()

return head;

}//顯示鍊錶

void showlist(node*head)

cout << endl;

}//獲取鍊錶長度

int getlength(node*head)

return count;

}//鍊錶翻轉

node*reverselist(node*head)

head = p;

return head;

}//顯示翻轉鍊錶

void showlist1(node*head,int count)

cout << endl;

}private:

node*head;

};int main()

**執行結果:

鍊錶的部分翻轉

對於鍊錶在第m與第個n節點之間翻轉,這裡採用了只對鍊錶資料域進行操作,將資料域存入到陣列中,然後對陣列操作。**如下:

//翻轉m與n之間的鍊錶

node*preverselist(node*head,int

count)

cout << "請輸入m與n的值:";

cin >> m >> n;

while (m <= n)

ptemp = head;

for (int i = 0; i < count; i++)

return head;

}

**執行結果:

鍊錶排序

鍊錶排序只對資料域進行操作,資料域資料放入陣列中即對陣列進行排序。**如下:

//鍊錶排序

node* sortlist(node* head,int

count)

sort(arr, arr + count);

ptemp = head;

for (int i = 0; i < count; i++)

return head;

}

**執行結果:

原地排序與鍊錶翻轉

有這樣乙個問題 有個長度為 n 的 key,val 陣列 a,其中 key 是 int 型別,並且其值在 0,n 之間 前閉後開,包括 0 不包括 n 該陣列按 key 是亂序的,但沒有重複 key。要求 對 a 原地按 key 排序,可以使用常數個臨時變數,不允許使用其它額外空間,時間複雜度必須是...

翻轉鍊錶演算法和實現

2 實現 3 執行結果 寫個翻轉鍊錶演算法,剛開始想到乙個不錯的思路。這個思路執行效率不低,時間複雜度為o n 可以不用分配額外的節點空間,空間複雜度為o 0 現在把思路整理一下,並實現 測試執行結果。用乙個while順序遍歷這個鍊錶,然後把遍歷到每個節點插入到鍊錶頭部。藍色箭頭即賦值符號,比如在第...

鍊錶的翻轉

如何快速的實現鍊錶的翻轉,比如鍊錶a資料為 str1,str2,str3,str4,str5,str6 翻轉後則變為 str6,str5,str4,str3,str2,str1 針對上述問題我能想到的一種辦法就是以壓棧的方式來實現,其實現思路相對較為簡單,通過定義乙個鍊錶資料結構的資料棧,遍歷鍊錶,...