日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

两个单链表相交的一系列问题

發布時間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个单链表相交的一系列问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
兩個單鏈表相交的一系列問題
在本題中,單鏈表可能有環,也可能無環。給定兩個單鏈表的頭節點 head1 和 head2,這兩個鏈表可能相交,也可能
不相交。請實現一個函數,如果兩個鏈表相交,請返回相交的第一個節點;如果不相交,返回 null 即可。
如果鏈表 1 的長度為 N,鏈表 2 的長度為 M,時間復雜度請達到 O(N+M),額外空間復雜度請達到 O(1)。(界定啊相交是內存地址相同)


方法:哈希表(極簡單適用一切情況)依次遍歷,每遍歷一個節點,將其加入哈希表中,若遍歷到鏈表最后一個節點也沒有發現哈希表中有之前已經記錄的節點,則表示鏈表無環,若遍歷到某個節點發現哈希表中已經存過這個節點,則表示有環,且這個節點是第一個相交的節點。另一種方法,建立兩個指針,一個快指針,一個慢指針,慢指針依次遍歷鏈表中每個節點,快指針跳步前進,每次走兩個節點,則這兩個指針一定會在環中相遇,當兩個指針相遇時,在鏈表開頭再設置一個指針,開頭的指針跟慢指針都繼續移動,每次一步,則兩個指針一定能在第一個環節點相遇


一個有環,一個無環,不可能相交
兩個無環鏈表,可以相交,有兩種結構(“||”和“Y”,不可能是“X”)不用哈希表的方法:分別得到兩個鏈表的長度,若一個長度為50,一個長度為40,則較長的鏈表的指針先走10個節點,之后兩個鏈表的指針同步前進,若出現某時刻兩個指針相等,則表示相交,即“Y”,否則兩鏈表結構是“||”
兩個鏈表都有環:
兩個鏈表各自都有環,沒有相交,即“66”結構
兩個鏈表在環外相交,即
Y
O
若兩個鏈表的入環節點是同一個,則表示是“YO”結構,則求第一個相交節點與“Y”情況解法相同
兩個鏈表共享環,即
||
O

兩個鏈表的指針,從頭開始,若Node1走到自身的節點也沒有遇到Node2,則表示兩個鏈表無交點,是“66”結構,若兩個鏈表的指針在遇到自身節點之前遇到了另一個鏈表的節點,則表示“||O”結構

public static class Node{public int value;public Node next;public Node(int data){this.value = data;} }public static Node getIntersectNode(Node haed1,Node head2){if(head1 == null || head2 == null){return null;}Node loop1 = getLoopNode(head1);Node loop2 = getLoopNode(head2);if(loop1 == null && loop2 == null){return noLoop(head1, head2);}if(loop1 != null && loop2 != null){return bothLoop(head1, loop1, head2, loop2);}return null; }public static Node getLoopNode(Node head){if(head == null || head.next == null || head.next.next == null){return null;}Node n1 = head.next; //n1為慢指針Node n2 = head.next.next; //n2為快指針while(n1 != n2){if(n2.next == null || n2.next.next == null){return null;}n2 = n2.next.next;n1 = n1.next;}n2 = head;while(n1 != n2){n1 = n1.next;n2 = n2.next;}n2 = head; //n2 從頭重新開始走,且變為慢指針while(n1 != n2){n1 = n1.next;n2 = n2.next;}return n1; }public static Node noLoop(Node head1, Node head2){if(head1 == null || head2 == null){return null;}Node cur1 = head1;Node cur2 = head2;int n = 0;while(cur1.next != null){n++;cur1 = cur1.next;}while(cur2.next != null){n--;cur2 = cur2.next;}if(cur1 != cur2){return null;}cur1 = n > 0 ? head1 : head2;cur2 = cur1 == head1 ? head2 : head1;n = Math.abs(n);while(n != 0){n--;cur1 = cur1.next;}while(cur1 != cur2){cur1 = cur1.next;cur2 = cur2.next;}return cur1; }public static Node bothLoop(Node head1, Node loop1, Node head2, Node loop2){Node cur1 = null;Node cur2 = null;if(loop1 == loop2){cur1 = head1;cur2 = head2;int n = 0;while(cur1 != loop1){n++;cur1 = cur1.next;}while(cur2 != loop2){n--;cur2 = cur2.next;}return cur1;}else{cur1 = loop1.next;while(cur1 != loop1){if(cur1 == loop2){return loop1;}cur1 = cur1.next;}return null;} }

總結

以上是生活随笔為你收集整理的两个单链表相交的一系列问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色特级大片 | 日本a视频在线观看 | 亚洲美女网站 | 亚洲乱码国产乱码精品精软件 | 日本激情久久 | 91免费官网 | 免费啪| 欧美一级二级三级视频 | 国色天香网站 | 国产处女| 中文字幕在线视频不卡 | 动漫av在线播放 | 熟女人妻aⅴ一区二区三区60路 | 青草视频免费观看 | 国产伦精品一区二区三区视频痴汉 | 久久亚洲天堂网 | 国产喷白浆一区二区三区 | 欧美视频| 亚洲最大av网站 | 精品96久久久久久中文字幕无 | 成人短视频在线 | 91重口味| 国产欧美一区二区三区在线 | 亚洲一区成人 | 激情影音 | 亚洲国产精品一 | 亚洲九九九九 | 亚洲精品一线二线三线 | 男人在线天堂 | 国产精品99久久 | 成年女人18级毛片毛片免费 | 黄色在线免费观看网站 | 国产区免费观看 | 丝袜黄色片 | 黄色片网站免费看 | 成人av网站在线观看 | 久久综合国产精品 | 国产精品乱码久久久久久 | 国产一区二区三区视频在线 | 午夜av免费在线观看 | 亚洲精品成人 | 韩日精品中文字幕 | 国产小视频在线看 | 打开免费观看视频在线播放 | 精品久久久久久久中文字幕 | 国产一区在线视频观看 | av丝袜天堂| 美女娇喘 | 中日韩男男gay无套 人人草人人干 | 亚洲精品乱码久久久久久国产主播 | 97超碰站| 日韩精品一区二区三区国语自制 | 日日夜夜精品免费 | 亚洲 激情 | 蜜臀中文字幕 | 亚洲人妖在线 | 国产不卡毛片 | 国产精品一区二区亚洲 | 激情av综合| 韩国三级视频在线观看 | 欧美性视频在线播放 | 五月天婷婷在线播放 | 国产九九热视频 | 欧美亚洲色图视频 | 免费二区 | 蜜桃99视频一区二区三区 | 四虎永久免费地址 | 最近中文字幕在线免费观看 | www.99色| 蜜臀av性久久久久蜜臀aⅴ涩爱 | 涩涩视频在线免费看 | 精品在线视频一区二区 | 操欧美老逼 | 欧美a在线观看 | 日本a在线 | 日韩香蕉视频 | 日韩中文字幕2019 | 手机av不卡| 人人干人人舔 | 九七在线视频 | 免费一级特黄 | 亚洲人成在线播放 | 亚洲aⅴ乱码精品成人区 | 国产一区二区三区四 | 男女免费视频 | 日本午夜电影 | 91成人综合 | 丁香婷婷社区 | 久久中字 | 亚洲欧美日韩综合 | 精品免费国产一区二区三区四区 | 国产欧美视频一区二区 | 性欧美久久久 | 日韩精品在线观看AV | 免费a级片在线观看 | 国产精品久久久 | 亚洲精品乱码久久久久久9色 | 国产suv精品一区二区三区 | 亚州av网站 |