解決多種條件下的反轉鍊錶問題

2021-10-05 10:47:37 字數 1412 閱讀 5394

//反轉鍊錶的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不...