鍊錶高階演算法 1

2021-07-13 07:32:04 字數 2249 閱讀 2837

一、鍊錶選擇排序

[cpp]view plain

copy

void

selectsort(plinklist list)                  

//選擇排序

plinknode cur = list->phead;  

plinknode p = null;  

plinknode min = null;  

while

(cur!=null)  

p = p->next;  

}  if

(min != cur)              

//將min所指向的data與無序區第乙個元素進行交換

cur = cur->next;              //有序區加一,無序區減一

}  }  

二、尋找中間結點

快慢指標是解決大多數鍊錶問題的乙個重要方法,在本題中就應用到了快慢指標,快指標fast每次走兩步,慢指標slow每次走一步,等到fast走到鍊錶尾部時,slow剛好指向中間結點。

[cpp]view plain

copy

plinknode findmindnode(plinklist list)          

//查詢中間節點

else

}  return

slow;  

}  

三、刪除乙個非尾的結點

//刪除非尾結點  

四、刪除倒數第k個結點,k大於1,小於鍊錶長度(o(n))

這個題跟快慢指標很像,我們可以先讓乙個指標走k步,然後再讓乙個指標從起點出發,等到先走的指標到達鍊錶尾部時,第二個指標剛好指向倒數第k個結點。

[cpp]view plain

copy

void

delknode(plinklist list,

intk)                    

//刪除倒數第k個結點,k要大於1,小於鍊錶長度 

plinknode cur = list->phead;  

plinknode del= list->phead;                 //del指向要刪除的結點

while

(cur->next!=null)  

cur = cur->next;  

}  if

(k <=0)  

}  

五、反轉鍊錶

[cpp]view plain

copy

void

reverselist(plinklist list)                   

//反轉鍊錶

plinknode newhead = null;           //指向新鍊錶的頭

plinknode tmp = null;  

plinknode cur = list->phead;  

while

(cur != null)  

list->phead = newhead;  

}  

六、在指定位置結點的前面插入乙個結點

這個問題與刪除乙個非尾結點是一模一樣的解決方法!!!

[cpp]view plain

copy

void

insertfrontnode(plinknode pos, datatype x)     

//在當前結點前插入乙個結點

newnode->next = pos->next;             //將這個新節點插入到pos後面

pos->next = newnode;  

newnode->data = pos->data;             //將pos指向的data儲存到newhead裡面

pos->data = x;                         //將x儲存在pos裡面

}   

《演算法競賽高階指南》1 3鍊錶

給定乙個長度為 n 的序列 a,a 中的數各不相同。對於 a 中的每乙個數 ai,求 min 1 j以及令上式取到最小值的 j 記為 pi 若最小值點不唯一,則選擇使 aj較小的那個。輸入格式 第一行輸入整數n,代表序列長度。第二行輸入n個整數a1 an,代表序列的具體數值,數值之間用空格隔開。輸出...

反轉鍊錶高階

最近課程比較緊張,中秋放假休息了兩天,回來繼續刷演算法題。鍊錶翻轉是個比較常見的型別,要吃透。力扣第92題 題目描述 反轉從位置 m 到 n 的鍊錶。請使用一趟掃瞄完成反轉。說明 1 m n 鍊錶長度。示例 輸入 1 2 3 4 5 null,m 2,n 4輸出 1 4 3 2 5 null 思路 ...

鍊錶1 單向鍊錶

鍊錶中最簡單的一種是單向鍊錶,它包含兩個域,乙個資料域和乙個指標域,指標域指向鍊錶中的下乙個節點,最後乙個節點的指標域指向乙個空值 鍊錶最基本的結構是在每個節點儲存資料和到下乙個節點的位址,在最後乙個節點儲存乙個特殊的結束標記,另外在乙個固定的位置儲存指向第乙個節點的指標,有的時候也會同時儲存指向最...