1. 程式人生 > 其它 >android bottomnavigationview去掉上陰影_android-ndk-r19c 編譯FFMpeg4.1

android bottomnavigationview去掉上陰影_android-ndk-r19c 編譯FFMpeg4.1

技術標籤:資料結構javascript演算法資料結構連結串列

定義:環形連結串列是將 單向連結串列的首尾相連,可以通過頭節點往下再次尋找到頭節點。
連結串列主要作用就是方便刪除和增加節點使用的,在查詢方面有一定的缺陷。

環形連結串列主要用於解決約瑟夫問題
約瑟夫問題:
設編號為 1,2,3,…n的n個人圍坐一圈,約定編號為k(1<=k<=n)的人從1開始報數,數到m的那個人出列,它的下一位又從1開始報數,數到m的那個人又出列,依次類推,直到所有人出列為止,由此產生一個出列編號的序列。

當然這個問題用陣列也能夠實現,這裡僅考慮使用環形連結串列,開啟演算法思路和了解環形連結串列

export default class CricleLinkedList<T>{

    private first: Node<T>;

    
    public add(data: T): void {
        if (!this.first) {
            this.first = new Node(data);
            this.first.next = this.first;  // 環形連結串列會將首尾相連
        } else {
            let temp = this.first;
            while
(temp.next !== this.first) { // 迴圈找到最後一個節點賦值給temp temp = temp.next; } temp.next = new Node<T>(data); // 將最後一個節點的next屬性指向 新增的資料 temp.next.next = this.first; // 將新增的節點的next屬性指向第一個節點,完成首尾相連的環形 } } public remove(node: Node<T>):
boolean { let temp = this.first; let result = false; while (temp) { if (temp == node) { temp.next = temp.next.next; result = true; this.showList(); break; } temp = temp.next; } return result; } public getNodeAndRemoveNode(countNum: number, startNo:number): T[] { let arr = []; let temp = this.first; let helper = this.first; while(true){ if(helper.next == this.first){ break; } helper = helper.next; } for (let index = 0; index < startNo - 1; index++) { // 第一次同時向後移動找到對應的開始位置 temp = temp.next; helper = helper.next; } while(true){ if(temp == helper){ // 如果helper等於了temp 說明當前連結串列中只存在了一個數據 temp.next = helper; arr.push(temp.data); break; } for (let index = 0; index < countNum - 1; index++) { // 通過迴圈 countNum-1 次完成移動計數 temp = temp.next; helper = helper.next; } console.log("小孩出圈: " , temp.data); arr.push(temp.data); temp = temp.next; helper.next = temp; // 將helper的下一個節點指向第一個節點,完成首尾連線,方便下一個迴圈使用 } console.log("最後留存的小孩: " , temp.data); return arr; } public showList() : void{ let temp = this.first; console.log("--------------------------- 列印連結串列") while(true){ console.log(" node :" ,temp.data); if(temp.next == this.first){ break; } temp = temp.next; } } }