//反轉鍊錶的m到n個節點
//下面解法沒有加入啞節點,如果引入啞節點則最後返回時不需要分類討論
/** * definition for singly-linked list.
* struct listnode
* };
*/class
solution
//因為修改m到n過程中cur和pre會逐次向後移動
//所以修改工作開始之前需要引入tail和ancestor指標,記錄前驅和後繼
//ancestor指向第m-1個節點,tail指向第m個節點
listnode *tail=cur,
*ancestor=pre;
//反轉工作開始
listnode *brige;
for(
;t>=1;
--t)
//反轉後整體來說應該分為三段:1到m-1,n到m,m+1到最後。
//反轉結束後cur指向m+1,pre指向n
//因為前期工作使得ancestor指向m-1,tail指向m
tail-
>next=cur;
if(ancestor==
null
)//說明是從第1個(m=1)開始反轉
head=pre;
else
ancestor-
>next=pre;
return head;}}
;
迭代的方法還可以通過交換節點的值(m第節點的值和第n個交換,第m+1個的值與第n-1的值交換…)而不通過修改指標來完成反轉
還可以利用棧,將m到n個壓入,彈出時則為n到m,反轉
1.遞迴反轉整個鍊錶
//「我們應該相信我們的遞迴函式可以完成我們賦予的工作」
//所以寫遞迴時應該著眼於大處,寫於小處
class
solution
};
2.反轉前n個節點
//和反轉整個鏈相似
class
solution
//不滿足終止條件就呼叫自己修改引數知道符合終止條件
listnode *brige=
reversen
(head-
>next,n-1)
; head-
>next-
>next=head;
head-
>next=successor;
return brige;}}
;
3.反轉部分鏈
listnode reversebetween
(listnode* head,
int m,
int n)
C 在多種條件下選擇自己的路 swith結構
c 中的switch結構和if結構一樣都可以實現條件判斷,只是適用的條件不同。switch結構主要用於多重條件switch的語法如下 switch condition case 個數 0。任何兩個 case 語句的常量表示式都不能具有相同的值,注意是值不能相同。case 和 default 的 br...
鍊錶的反轉問題
思路 所謂反轉鍊錶就是指將這個鍊錶的所有指標方向反向。採取的辦法是時刻保留連續的3個結點,ppre pcur pnext 修改指標方向 將pcur.next設定為ppre 然後修改ppre pcur pnext向前推進即可 ppre pcur pcur pnext pnext pnext.next ...
高併發條件下的快取穿透問題
1 快取穿透 快取穿透是指查詢乙個一定不存在的資料,由於快取是不命中時被動寫的,並且出於容錯考慮,如果從儲存層查不到資料則不寫入快取,這將導致這個不存在的資料每次請求都要到儲存層去查詢,失去了快取的意義。在流量大時,可能db就掛掉了,要是有人利用不存在的key頻繁攻擊我們的應用,這就是漏洞。key不...