日韩性视频-久久久蜜桃-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;} }

總結

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

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

主站蜘蛛池模板: 亚日韩| www日本在线观看 | 性色视频在线观看 | 99热在线观看免费 | 久插网| 秋霞午夜影院 | 欧美卡一卡二卡三 | av片免费在线播放 | 精品成人免费一区二区在线播放 | 中文久久久 | 又白又嫩毛又多15p 超碰在线一区 | 国产精品xx | 国内视频一区二区三区 | 国产视频自拍一区 | 亚洲午夜毛片 | 免费在线成人网 | 亚洲涩综合 | 午夜做爰xxxⅹ性高湖视频美国 | 五月婷婷六月香 | 天天插天天插 | 伊人伊人伊人伊人 | 可以免费看毛片的网站 | 在线观看免费黄视频 | 久操伊人| 爱啪啪导航 | 亚洲精品电影在线观看 | 手机看片福利视频 | 性xxxx视频播放免费 | 老司机一区二区三区 | 岛国精品在线播放 | 成人wwxx免费观看 | 国产精品视频一二区 | 国产主播第一页 | 国产精品日韩专区 | 国产成人a亚洲精品 | 无码精品视频一区二区三区 | 日本中文字幕在线免费观看 | 森林影视官网在线观看 | 肉丝超薄少妇一区二区三区 | 国产亚洲精久久久久久无码苍井空 | 国产美女久久久 | 成人手机在线播放 | 久草免费在线播放 | 动漫av网站 | 在线xxxx| 日韩欧美中文字幕在线观看 | 少妇高潮一区二区三区99欧美 | 国产精品电影院 | 成人精品视频在线播放 | 另类少妇人与禽zozz0性伦 | 欧美一级鲁丝片 | 欧美中文字幕在线观看 | 成人区人妻精品一区 | 国产精品精品国产 | 日本免费黄色小视频 | 国产亚洲视频在线观看 | 久久人精品| 国久久 | 日本欧美一级片 | www夜夜| 欧美黑人一级片 | 久久久久一级 | 亚洲人成在线播放 | 无码精品在线观看 | 国产人妻精品久久久久野外 | 久热这里只有 | 女女同性被吸乳羞羞 | 人人干免费| 男女羞羞动态图 | 日韩一区久久 | av在线天天 | 欧美一区二区三区色 | 精品欧美久久久 | 韩国av不卡 | 岛国片免费在线观看 | 一级大片视频 | 直接看av的网站 | 日韩xxx高潮hd | 在线观看免费高清 | 亚洲色图 美腿丝袜 | 福利一区在线观看 | 台湾佬美性中文娱乐 | v片在线观看 | 中文字幕精 | 欧美性视频网站 | 中文字幕第3页 | 国产偷人妻精品一区二区在线 | 亚洲经典久久 | 黄色片怎么看 | 欧洲一级黄色片 | 2019天天操| 宅男在线视频 | 麻豆精品一区二区 | 久久久久久av | 深夜成人在线 | 亚洲乱码一区二区 | 欧美精品久久99 | 成人特级片 | 男女免费视频网站 |