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