java面試手寫單鏈表_(轉)面試大總結之一:Java搞定面試中的鏈表題目

packageLinkedListSummary;

importjava.util.HashMap;

importjava.util.Stack;

/**

*?http://blog.csdn.net/luckyxiaoqiang/article/details/7393134?輕松搞定面試中的鏈表題目

*?http://www.cnblogs.com/jax/archive/2009/12/11/1621504.html?算法大全(1)單鏈表

*

*?目錄:

*?1.?求單鏈表中結點的個數:?getListLength

*?2.?將單鏈表反轉:?reverseList(遍歷),reverseListRec(遞歸)

*?3.?查找單鏈表中的倒數第K個結點(k?>?0):?reGetKthNode

*?4.?查找單鏈表的中間結點:?getMiddleNode

*?5.?從尾到頭打印單鏈表:?reversePrintListStack,reversePrintListRec(遞歸)

*?6.?已知兩個單鏈表pHead1?和pHead2?各自有序,把它們合并成一個鏈表依然有序:?mergeSortedList,?mergeSortedListRec

*?7.?判斷一個單鏈表中是否有環:?hasCycle

*?8.?判斷兩個單鏈表是否相交:?isIntersect

*?9.?求兩個單鏈表相交的第一個節點:?getFirstCommonNode

*?10.?已知一個單鏈表中存在環,求進入環中的第一個節點:?getFirstNodeInCycle,?getFirstNodeInCycleHashMap

*?11.?給出一單鏈表頭指針pHead和一節點指針pToBeDeleted,O(1)時間復雜度刪除節點pToBeDeleted:?delete

*

*/

publicclassDemo?{

publicstaticvoidmain(String[]?args)?{

Node?n1?=?newNode(1);

Node?n2?=?newNode(2);

Node?n3?=?newNode(3);

Node?n4?=?newNode(4);

Node?n5?=?newNode(5);

n1.next?=?n2;

n2.next?=?n3;

n3.next?=?n4;

n4.next?=?n5;

printList(n1);

//??????System.out.println(getListLength(n1));

//??????Node?head?=?reverseList(n1);

//??????Node?head?=?reverseListRec(n1);

//??????printList(head);

Node?x?=?reGetKthNode(n1,?2);

System.out.println(x.val);

reGetKthNodeRec(n1,?2);

//??????x?=?getMiddleNode(head);

//??????System.out.println(x.val);

//??????System.out.println("reversePrintListStack:");

//??????reversePrintListStack(head);

//??????System.out.println("reversePrintListRec:");

//??????reversePrintListRec(head);

}

//??public?static?void?main(String[]?args)?{

//??????Node?n1?=?new?Node(1);

//??????Node?n2?=?new?Node(3);

//??????Node?n3?=?new?Node(5);

//??????n1.next?=?n2;

//??????n2.next?=?n3;

//

//??????Node?m1?=?new?Node(1);

//??????Node?m2?=?new?Node(4);

//??????Node?m3?=?new?Node(6);

//??????m1.next?=?m2;

//??????m2.next?=?m3;

//

//

//??????Node?ret?=?mergeSortedList(n1,?m1);

//??????printList(ret);

//??}

privatestaticclassNode?{

intval;

Node?next;

publicNode(intval)?{

this.val?=?val;

}

}

publicstaticvoidprintList(Node?head)?{

while(head?!=null)?{

System.out.print(head.val?+?"?");

head?=?head.next;

}

System.out.println();

}

//?求單鏈表中結點的個數

//?注意檢查鏈表是否為空。時間復雜度為O(n)

publicstaticintgetListLength(Node?head)?{

//?注意頭結點為空情況

if(head?==null)?{

return0;

}

intlen?=0;

Node?cur?=?head;

while(cur?!=null)?{

len++;

cur?=?cur.next;

}

returnlen;

}

//?翻轉鏈表(遍歷)

//?從頭到尾遍歷原鏈表,每遍歷一個結點,

//?將其摘下放在新鏈表的最前端。

//?注意鏈表為空和只有一個結點的情況。時間復雜度為O(n)

publicstaticNode?reverseList(Node?head)?{

//?如果鏈表為空或只有一個節點,無需反轉,直接返回原鏈表表頭

if(head?==null||?head.next?==null)?{

returnhead;

}

Node?reHead?=?null;//?反轉后新鏈表指針

Node?cur?=?head;

while(cur?!=null)?{

Node?preCur?=?cur;??????//?用preCur保存住對要處理節點的引用

cur?=?cur.next;?????????????//?cur更新到下一個節點

preCur.next?=?reHead;???//?更新要處理節點的next引用

reHead?=?preCur;????????????//?reHead指向要處理節點的前一個節點

}

returnreHead;

}

//?翻轉遞歸(遞歸)

//?遞歸的精髓在于你就默認reverseListRec已經成功幫你解決了子問題了!但別去想如何解決的

//?現在只要處理當前node和子問題之間的關系。最后就能圓滿解決整個問題。

/*

head

1?->?2?->?3?->?4

head

1--------------

|

4?->?3?->?2????????????????????????????//?Node?reHead?=?reverseListRec(head.next);

reHead??????head.next

4?->?3?->?2?->?1????????????????????//?head.next.next?=?head;

reHead

4?->?3?->?2?->?1?->?null????????????//?head.next?=?null;

reHead

*/

publicstaticNode?reverseListRec(Node?head){

if(head?==null||?head.next?==null){

returnhead;

}

Node?reHead?=?reverseListRec(head.next);

head.next.next?=?head;??????//?把head接在reHead串的最后一個后面

head.next?=?null;//?防止循環鏈表

returnreHead;

}

/**

*?查找單鏈表中的倒數第K個結點(k?>?0)

*?最普遍的方法是,先統計單鏈表中結點的個數,然后再找到第(n-k)個結點。注意鏈表為空,k為0,k為1,k大于鏈表中節點個數時的情況

*?。時間復雜度為O(n)。代碼略。?這里主要講一下另一個思路,這種思路在其他題目中也會有應用。

*?主要思路就是使用兩個指針,先讓前面的指針走到正向第k個結點

*?,這樣前后兩個指針的距離差是k-1,之后前后兩個指針一起向前走,前面的指針走到最后一個結點時,后面指針所指結點就是倒數第k個結點

*/

publicstaticNode?reGetKthNode(Node?head,intk)?{

//?這里k的計數是從1開始,若k為0或鏈表為空返回null

if(k?==0||?head?==null)?{

returnnull;

}

Node?q?=?head;?//?q在p前面??p--q

Node?p?=?head;?//?p在q后面

//?讓q領先p距離k

while(k?>1&&?q?!=null)?{

q?=?q.next;

k--;

}

//?當節點數小于k,返回null

if(k?>1||?q?==null)?{

returnnull;

}

//?前后兩個指針一起走,直到前面的指針指向最后一個節點

while(q.next?!=null)?{

p?=?p.next;

q?=?q.next;

}

//?當前面的指針指向最后一個節點時,后面的指針指向倒數k個節點

returnp;

}

/**

*?遞歸打印出倒數第k位的值

*?@param?head

*?@param?dist

*/

staticintlevel?=0;

publicstaticvoidreGetKthNodeRec(Node?head,intk)?{

if(head?==null){

return;

}

if(k?==1){

return;

}

reGetKthNodeRec(head.next,?k);

level++;

if(level?==?k)?{

System.out.println(head.val);

}

}

//?查找單鏈表的中間結點

/**

*?此題可應用于上一題類似的思想。也是設置兩個指針,只不過這里是,兩個指針同時向前走,前面的指針每次走兩步,后面的指針每次走一步,

*?前面的指針走到最后一個結點時,后面的指針所指結點就是中間結點,即第(n/2+1)個結點。注意鏈表為空,鏈表結點個數為1和2的情況。時間復雜度O(n

*/

publicstaticNode?getMiddleNode(Node?head)?{

if(head?==null||?head.next?==null)?{

returnhead;

}

Node?q?=?head;??????//?p---q

Node?p?=?head;

//?前面指針每次走兩步,直到指向最后一個結點,后面指針每次走一步

while(q.next?!=null)?{

q?=?q.next;

p?=?p.next;

if(q.next?!=null)?{

q?=?q.next;

}

}

returnp;

}

/**

*?從尾到頭打印單鏈表

*?對于這種顛倒順序的問題,我們應該就會想到棧,后進先出。所以,這一題要么自己使用棧,要么讓系統使用棧,也就是遞歸。注意鏈表為空的情況

*?。時間復雜度為O(n)

*/

publicstaticvoidreversePrintListStack(Node?head)?{

Stack?s?=?newStack();

Node?cur?=?head;

while(cur?!=null)?{

s.push(cur);

cur?=?cur.next;

}

while(!s.empty())?{

cur?=?s.pop();

System.out.print(cur.val?+?"?");

}

System.out.println();

}

/**

*?從尾到頭打印鏈表,使用遞歸(優雅!)

*/

publicstaticvoidreversePrintListRec(Node?head)?{

if(head?==null)?{

return;

}?else{

reversePrintListRec(head.next);

System.out.print(head.val?+?"?");

}

}

/**

*?已知兩個單鏈表pHead1?和pHead2?各自有序,把它們合并成一個鏈表依然有序

*?這個類似歸并排序。尤其注意兩個鏈表都為空,和其中一個為空時的情況。只需要O(1)的空間。時間復雜度為O(max(len1,?len2))

*/

publicstaticNode?mergeSortedList(Node?head1,?Node?head2)?{

//?其中一個鏈表為空的情況,直接返回另一個鏈表頭,O(1)

if(head1?==null)?{

returnhead2;

}

if(head2?==null)?{

returnhead1;

}

Node?mergeHead?=?null;

//?先確定下來mergeHead是在哪里

if(head1.val?

mergeHead?=?head1;

head1?=?head1.next;?????????//?跳過已經合并了的元素

mergeHead.next?=?null;//?斷開mergeHead和后面的聯系

}?else{

mergeHead?=?head2;

head2?=?head2.next;

mergeHead.next?=?null;

}

Node?mergeCur?=?mergeHead;

while(head1?!=null&&?head2?!=null)?{

if(head1.val?

mergeCur.next?=?head1;???????//?把找到較小的元素合并到merge中

head1?=?head1.next;??????????????//?跳過已經合并了的元素

mergeCur?=?mergeCur.next;????//?找到下一個準備合并的元素

mergeCur.next?=?null;//?斷開mergeCur和后面的聯系

}?else{

mergeCur.next?=?head2;

head2?=?head2.next;

mergeCur?=?mergeCur.next;

mergeCur.next?=?null;

}

}

//?合并剩余的元素

if(head1?!=null)?{

mergeCur.next?=?head1;

}?elseif(head2?!=null)?{

mergeCur.next?=?head2;

}

returnmergeHead;

}

/**

*?遞歸合并兩鏈表(優雅!)

*/

publicstaticNode?mergeSortedListRec(Node?head1,?Node?head2)?{

if(head1?==null)?{

returnhead2;

}

if(head2?==null)?{

returnhead1;

}

Node?mergeHead?=?null;

if(head1.val?

mergeHead?=?head1;

//?連接已解決的子問題

mergeHead.next?=?mergeSortedListRec(head1.next,?head2);

}?else{

mergeHead?=?head2;

mergeHead.next?=?mergeSortedListRec(head1,?head2.next);

}

returnmergeHead;

}

/**

*?判斷一個單鏈表中是否有環

*?這里也是用到兩個指針。如果一個鏈表中有環,也就是說用一個指針去遍歷,是永遠走不到頭的。因此,我們可以用兩個指針去遍歷,一個指針一次走兩步

*?,一個指針一次走一步,如果有環,兩個指針肯定會在環中相遇。時間復雜度為O(n)

*/

publicstaticbooleanhasCycle(Node?head)?{

Node?fast?=?head;?//?快指針每次前進兩步

Node?slow?=?head;?//?慢指針每次前進一步

while(fast?!=null&&?fast.next?!=null)?{

fast?=?fast.next.next;

slow?=?slow.next;

if(fast?==?slow)?{//?相遇,存在環

returntrue;

}

}

returnfalse;

}

//?判斷兩個單鏈表是否相交

/**

*?如果兩個鏈表相交于某一節點,那么在這個相交節點之后的所有節點都是兩個鏈表所共有的。?也就是說,如果兩個鏈表相交,那么最后一個節點肯定是共有的。

*?先遍歷第一個鏈表,記住最后一個節點,然后遍歷第二個鏈表,?到最后一個節點時和第一個鏈表的最后一個節點做比較,如果相同,則相交,

*?否則不相交。時間復雜度為O(len1+len2),因為只需要一個額外指針保存最后一個節點地址,?空間復雜度為O(1)

*/

publicstaticbooleanisIntersect(Node?head1,?Node?head2)?{

if(head1?==null||?head2?==null)?{

returnfalse;

}

Node?tail1?=?head1;

//?找到鏈表1的最后一個節點

while(tail1.next?!=null)?{

tail1?=?tail1.next;

}

Node?tail2?=?head2;

//?找到鏈表2的最后一個節點

while(tail2.next?!=null)?{

tail2?=?tail2.next;

}

returntail1?==?tail2;

}

/**

*?求兩個單鏈表相交的第一個節點?對第一個鏈表遍歷,計算長度len1,同時保存最后一個節點的地址。

*?對第二個鏈表遍歷,計算長度len2,同時檢查最后一個節點是否和第一個鏈表的最后一個節點相同,若不相同,不相交,結束。

*?兩個鏈表均從頭節點開始,假設len1大于len2

*?,那么將第一個鏈表先遍歷len1-len2個節點,此時兩個鏈表當前節點到第一個相交節點的距離就相等了,然后一起向后遍歷,直到兩個節點的地址相同。

*?時間復雜度,O(len1+len2)

*

*??????????????----????len2

*???????????????????|__________

*???????????????????|

*???????---------???len1

*???????|---|

*/

publicstaticNode?getFirstCommonNode(Node?head1,?Node?head2)?{

if(head1?==null||?head2?==null)?{

returnnull;

}

intlen1?=1;

Node?tail1?=?head1;

while(tail1.next?!=null)?{

tail1?=?tail1.next;

len1++;

}

intlen2?=1;

Node?tail2?=?head2;

while(tail2.next?!=null)?{

tail2?=?tail2.next;

len2++;

}

//?不相交直接返回NULL

if(tail1?!=?tail2)?{

returnnull;

}

Node?n1?=?head1;

Node?n2?=?head2;

//?略過較長鏈表多余的部分

if(len1?>?len2)?{

intk?=?len1?-?len2;

while(k?!=0)?{

n1?=?n1.next;

k--;

}

}?else{

intk?=?len2?-?len1;

while(k?!=0)?{

n2?=?n2.next;

k--;

}

}

//?一起向后遍歷,直到找到交點

while(n1?!=?n2)?{

n1?=?n1.next;

n2?=?n2.next;

}

returnn1;

}

/**

*?求進入環中的第一個節點?用快慢指針做(本題用了Crack?the?Coding?Interview的解法,因為更簡潔易懂!)

*/

publicstaticNode?getFirstNodeInCycle(Node?head)?{

Node?slow?=?head;

Node?fast?=?head;

//?1)?找到快慢指針相遇點

while(fast?!=null&&?fast.next?!=null)?{

slow?=?slow.next;

fast?=?fast.next.next;

if(slow?==?fast)?{//?Collision

break;

}

}

//?錯誤檢查,這是沒有環的情況

if(fast?==null||?fast.next?==null)?{

returnnull;

}

//?2)現在,相遇點離環的開始處的距離等于鏈表頭到環開始處的距離,

//?這樣,我們把慢指針放在鏈表頭,快指針保持在相遇點,然后

//?同速度前進,再次相遇點就是環的開始處!

slow?=?head;

while(slow?!=?fast)?{

slow?=?slow.next;

fast?=?fast.next;

}

//?再次相遇點就是環的開始處

returnfast;

}

/**

*?求進入環中的第一個節點?用HashMap做?一個無環的鏈表,它每個結點的地址都是不一樣的。

*?但如果有環,指針沿著鏈表移動,那這個指針最終會指向一個已經出現過的地址?以地址為哈希表的鍵值,每出現一個地址,就將該鍵值對應的實值置為true。

*?那么當某個鍵值對應的實值已經為true時,說明這個地址之前已經出現過了,?直接返回它就OK了

*/

publicstaticNode?getFirstNodeInCycleHashMap(Node?head)?{

HashMap?map?=?newHashMap();

while(head?!=null)?{

if(map.get(head)?==true)?{

returnhead;//?這個地址之前已經出現過了,就是環的開始處

}?else{

map.put(head,?true);

head?=?head.next;

}

}

returnhead;

}

/**

*?給出一單鏈表頭指針head和一節點指針toBeDeleted,O(1)時間復雜度刪除節點tBeDeleted

*?對于刪除節點,我們普通的思路就是讓該節點的前一個節點指向該節點的下一個節點

*?,這種情況需要遍歷找到該節點的前一個節點,時間復雜度為O(n)。對于鏈表,

*?鏈表中的每個節點結構都是一樣的,所以我們可以把該節點的下一個節點的數據復制到該節點

*?,然后刪除下一個節點即可。要注意最后一個節點的情況,這個時候只能用常見的方法來操作,先找到前一個節點,但總體的平均時間復雜度還是O(1)

*/

publicvoiddelete(Node?head,?Node?toDelete){

if(toDelete?==null){

return;

}

if(toDelete.next?!=null){//?要刪除的是一個中間節點

toDelete.val?=?toDelete.next.val;???????//?將下一個節點的數據復制到本節點!

toDelete.next?=?toDelete.next.next;

}

else{//?要刪除的是最后一個節點!

if(head?==?toDelete){//?鏈表中只有一個節點的情況

head?=?null;

}else{

Node?node?=?head;

while(node.next?!=?toDelete){//?找到倒數第二個節點

node?=?node.next;

}

node.next?=?null;

}

}

}

}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534467.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534467.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ccf認證俄羅斯方塊java_CCF認證歷年試題 - osc_h3robkrt的個人空間 - OSCHINA - 中文開源技術交流社區...

CCF認證歷年試題不加索引整理會死星人orz第一題:CCF201712-1 最小差值(100分)CCF201703-1 分蛋糕(100分)CCF201612-1 中間數(100分)CCF201609-1 最大波動(100分)CCF201604-1 折點計數(100分)CCF201509-1 數列分段(100分)CCF201503-1 圖像旋轉(100分)CCF201412-1 門禁…

mysql 變量作表名查詢_使用MySQL函數變量作為表名查詢

我需要有一個表中增加一定的ID(如AUTO_INCREMENT)函數使用MySQL函數變量作為表名查詢我有水木清華這樣DELIMITER $$DROP FUNCTION IF EXISTS GetNextID$$CREATE FUNCTION GetNextID(tblName TEXT, increment INT)RETURNS INTDETERMINISTICBEGINDECLARE NextID INT;SELECT MAX(c…

java 簽名 ecdsa_Java實現ECDSA簽名算法

ECDSA簽名算法package com.albedo.security;/*** DSA 加解密實現*/public class ECDSAUtils extends Base {//字符編碼public static final String ALGORITHM "EC";public static final String SIGN_ALGORITHM "SHA1withECDSA";/*** ECDSA 驗簽** param …

java異常處理方式推薦做法_談談Java異常處理這件事兒

此文已由作者謝蕾授權網易云社區發布。歡迎訪問網易云社區,了解更多網易技術產品運營經驗。前言我們對于“異常處理”這個詞并不陌生,眾多框架和庫在異常處理方面都提供了便利,但是對于何種處理才是最佳實踐,也是眾說紛紜。異常處…

as400和java的區別_文件傳輸協議和AS400

我目前收到以下錯誤:遠程服務器返回錯誤:(501)參數或參數中的語法錯誤 .我已經檢查了服務器并且文件確實存在,如果我打開命令提示符并鍵入以下代碼它可以工作:ftpopen 192.168.1.2cd /Imagesget S12345.jpeg這是正常的&#xff0c…

java中同時兩人提交數據_如何一起發送JSON請求和發布表單數據請求?

所以這是一個應該在POST請求中接受以下參數的API:token (as form data)apiKey (as form data){"notification": {"id": 1,"heading": "some heading","subheading": "some subheading","image&qu…

java 64內存不足_請教一個 Java 內存占用的問題

第 1 條附言 364 天前2020-03-04 01:08:55.525 [HikariPool-1 housekeeper] WARN c.z.hikari.pool.HikariPool - HikariPool-1 - Thread starvation or clock leap detected (housekeeper delta1m5s643ms48?s450ns).2020-03-04 01:09:08.516 [task-11] ERROR o.s.s.s.TaskU…

java 抽象類 final_final/抽象類/interface

lesson Thirteen                          2018-05-10 02:10:43final:最終的,可以修飾類、屬性、方法1.final修飾類:這個類就不能被繼承,如:String類,StringBuffer類,System類1…

java char i=2+#039;2#039;;_P039 二維數組的字符按列存放到字符串中 ★★

所屬年份:2010.9;2011.9;2012.3請編寫函數fun,該函數的功能是:將M行N列的二維數組中的字符數據,按列的順序依次放到一個字符串中。例如,若二維數組中的數據為W W W WS S S SH H H H則字符串中的內容應是:WSHWSHWSHWSH。#include#define M 3#d…

java io中斷_JDK源碼閱讀:InterruptibleChannel 與可中斷 IO

來源:木杉的博客 ,imushan.com/2018/08/01/java/language/JDK源碼閱讀-InterruptibleChannel與可中斷IO/Java傳統IO是不支持中斷的,所以如果代碼在read/write等操作阻塞的話,是無法被中斷的。這就無法和Thead的interrupt模型配合使…

java值棧_Struts2學習筆記-Value Stack(值棧)和OGNL表達式

只是本人的Struts2學習筆記,關于Value Stack(值棧)和OGNL表達式,把我知道的都說出來,希望對大家有用。一,值棧的作用記錄處理當前請求的action的數據。二,小例子有兩個action:Action1和Action2Action1有兩個…

php項目實戰流程_一個完整的php流程管理實例代碼分享

1. 添加新流程頁面:請選擇流程節點:session_start();include("../DBDA.class.php");$db new DBDA();$suser "select * from users";$auser $db->Query($suser);foreach($auser as $v){echo " {$v[2]} ";}?>$att…

php cdata,PHPcdata處理(詳細介紹)_PHP教程

PHPcdata處理(詳細介紹)_PHP教程當時在網上找了一個CDATA的轉換器, 修改之后, 將CDATA標簽給過濾掉。如下代碼如下:// States://// out// // // // // // // // in// ]// ]]//// (Yes, the states a represented by strings.)//$state out;$a s…

PHP 與go 通訊,Golang和php通信

不同語言之間的通信方式有很多種,這里我介紹一種最簡單通信方式,json-rpc。Golang自帶json-rpc包,使用起來十分簡單,示例如下,提供一個簡單echo server。package mainimport ("fmt""net""net…

php 接口日志,PHP 開發 APP 接口--錯誤日志接口

APP 上線以后可能遇到的問題:① APP 強退② 數據加載失敗③ APP 潛在問題錯誤日志需要記錄的內容數據表 error_log 字段:idapp_id:app 類別 iddid:客戶端設備號version_id:版本號version_mini:小版本號erro…

php 空模塊,tp5.1配置空模塊,空方法

config/app.php//默認的空模塊名empty_module>index,controller/Error.php<?php namespace app\index\controller;use Env;use think\Controller;class Error extends Controller {//Db::connect(db_ck)//全局MISS路由 在route.php里面設置找不到控制器默認處理//Route:…

centos7php自啟動,centos7系統下nginx安裝并配置開機自啟動操作

這篇文章主要介紹了centos7系統下nginx安裝并配置開機自啟動操作方法,非常不錯&#xff0c;具有參考借鑒價值&#xff0c;需要的朋友可以參考下這篇文章主要介紹了centos7系統下nginx安裝并配置開機自啟動操作方法,非常不錯&#xff0c;具有參考借鑒價值&#xff0c;需要的朋友…

時鐘php,php+js液晶時鐘

php代碼$size_small5;//液晶寬度$size_big25;//液晶長度$distance10;//間距$color_back"#DDDDDD";$color_dark"#CCCCCC";$color_light"#000000";$number0;?>Timer|www.ibtf.net|www.bitefu.netfunction swapcolor(obj,onoff)//改變顏色{if (…

r和matlab學哪個,初學者求教‘r*’是什么意思啊

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓PLOT(X,Y,S) where S is a character string made from one elementfrom any or all the following 3 columns:b blue . point - solidg green o circle : dottedr red x x-mark -. dashdotc cyan plus -- dashedm magenta * star…

php swoole 心跳,聊聊swoole的心跳

來自&#xff1a;桶哥的一篇關于swoole的心跳的文章&#xff0c;作為Swoole顧問(顧得上就問,是為「顧問」)得推一下這篇文章&#xff0c;最后只留下一配置&#xff0c;其實我也不是太明白原理&#xff0c;我在想如果是局域網里還需要心跳&#xff1f;—————————————…