国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

數據結構與算法之鏈表相交,找交點

開發 前端 算法
給你兩個單鏈表的頭節點 headA 和 headB ,請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表沒有交點,返回 null 。

[[441326]]

鏈表相交

力扣題目鏈接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci

給你兩個單鏈表的頭節點 headA 和 headB ,請你找出并返回兩個單鏈表相交的起始節點。如果兩個鏈表沒有交點,返回 null 。

圖示兩個鏈表在節點 c1 開始相交:

題目數據 保證 整個鏈式結構中不存在環。

注意,函數返回結果后,鏈表必須 保持其原始結構 。

示例 1:

示例 2:

示例 3:

思路

簡單來說,就是求兩個鏈表交點節點的指針。這里同學們要注意,交點不是數值相等,而是指針相等。

為了方便舉例,假設節點元素數值相等,則節點指針相等。

看如下兩個鏈表,目前curA指向鏈表A的頭結點,curB指向鏈表B的頭結點:

我們求出兩個鏈表的長度,并求出兩個鏈表長度的差值,然后讓curA移動到,和curB 末尾對齊的位置,如圖: 

此時我們就可以比較curA和curB是否相同,如果不相同,同時向后移動curA和curB,如果遇到curA == curB,則找到交點。

否則循環退出返回空指針。

C++代碼如下:

  1. class Solution { 
  2. public
  3.     ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) { 
  4.         ListNode* curA = headA; 
  5.         ListNode* curB = headB; 
  6.         int lenA = 0, lenB = 0; 
  7.         while (curA != NULL) { // 求鏈表A的長度 
  8.             lenA++; 
  9.             curA = curA->next
  10.         } 
  11.         while (curB != NULL) { // 求鏈表B的長度 
  12.             lenB++; 
  13.             curB = curB->next
  14.         } 
  15.         curA = headA; 
  16.         curB = headB; 
  17.         // 讓curA為最長鏈表的頭,lenA為其長度 
  18.         if (lenB > lenA) { 
  19.             swap (lenA, lenB); 
  20.             swap (curA, curB); 
  21.         } 
  22.         // 求長度差 
  23.         int gap = lenA - lenB; 
  24.         // 讓curA和curB在同一起點上(末尾位置對齊) 
  25.         while (gap--) { 
  26.             curA = curA->next
  27.         } 
  28.         // 遍歷curA 和 curB,遇到相同則直接返回 
  29.         while (curA != NULL) { 
  30.             if (curA == curB) { 
  31.                 return curA; 
  32.             } 
  33.             curA = curA->next
  34.             curB = curB->next
  35.         } 
  36.         return NULL
  37.     } 
  38. }; 
  • 時間復雜度:
  • 空間復雜度:

其他語言版本

Java

  1. public class Solution { 
  2.     public ListNode getIntersectionNode(ListNode headA, ListNode headB) { 
  3.         ListNode curA = headA; 
  4.         ListNode curB = headB; 
  5.         int lenA = 0, lenB = 0; 
  6.         while (curA != null) { // 求鏈表A的長度 
  7.             lenA++; 
  8.             curA = curA.next
  9.         } 
  10.         while (curB != null) { // 求鏈表B的長度 
  11.             lenB++; 
  12.             curB = curB.next
  13.         } 
  14.         curA = headA; 
  15.         curB = headB; 
  16.         // 讓curA為最長鏈表的頭,lenA為其長度 
  17.         if (lenB > lenA) { 
  18.             //1. swap (lenA, lenB); 
  19.             int tmpLen = lenA; 
  20.             lenA = lenB; 
  21.             lenB = tmpLen; 
  22.             //2. swap (curA, curB); 
  23.             ListNode tmpNode = curA; 
  24.             curA = curB; 
  25.             curB = tmpNode; 
  26.         } 
  27.         // 求長度差 
  28.         int gap = lenA - lenB; 
  29.         // 讓curA和curB在同一起點上(末尾位置對齊) 
  30.         while (gap-- > 0) { 
  31.             curA = curA.next
  32.         } 
  33.         // 遍歷curA 和 curB,遇到相同則直接返回 
  34.         while (curA != null) { 
  35.             if (curA == curB) { 
  36.                 return curA; 
  37.             } 
  38.             curA = curA.next
  39.             curB = curB.next
  40.         } 
  41.         return null
  42.     } 
  43.  

Python

  1. class Solution: 
  2.     def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: 
  3.         ""
  4.         根據快慢法則,走的快的一定會追上走得慢的。 
  5.         在這道題里,有的鏈表短,他走完了就去走另一條鏈表,我們可以理解為走的快的指針。 
  6.  
  7.         那么,只要其中一個鏈表走完了,就去走另一條鏈表的路。如果有交點,他們最終一定會在同一個 
  8.         位置相遇 
  9.         ""
  10.         cur_a, cur_b = headA, headB     # 用兩個指針代替a和b 
  11.  
  12.  
  13.         while cur_a != cur_b: 
  14.             cur_a = cur_a.next if cur_a else headB      # 如果a走完了,那么就切換到b走 
  15.             cur_b = cur_b.next if cur_b else headA      # 同理,b走完了就切換到a 
  16.  
  17.         return cur_a 

Go

  1. func getIntersectionNode(headA, headB *ListNode) *ListNode { 
  2.     curA := headA 
  3.     curB := headB 
  4.     lenA, lenB := 0, 0 
  5.     // 求A,B的長度 
  6.     for curA != nil { 
  7.         curA = curA.Next 
  8.         lenA++ 
  9.     } 
  10.     for curB != nil { 
  11.         curB = curB.Next 
  12.         lenB++ 
  13.     } 
  14.     var step int 
  15.     var fast, slow *ListNode 
  16.     // 請求長度差,并且讓更長的鏈表先走相差的長度 
  17.     if lenA > lenB { 
  18.         step = lenA - lenB 
  19.         fast, slow = headA, headB 
  20.     } else { 
  21.         step = lenB - lenA 
  22.         fast, slow = headB, headA 
  23.     } 
  24.     for i:=0; i < step; i++ { 
  25.         fast = fast.Next 
  26.     } 
  27.     // 遍歷兩個鏈表遇到相同則跳出遍歷 
  28.     for fast != slow { 
  29.         fast = fast.Next 
  30.         slow = slow.Next 
  31.     } 
  32.     return fast 

javaScript

  1. var getListLen = function(head) { 
  2.     let len = 0, cur = head; 
  3.     while(cur) { 
  4.        len++; 
  5.        cur = cur.next
  6.     } 
  7.     return len; 
  8. var getIntersectionNode = function(headA, headB) { 
  9.     let curA = headA,curB = headB, 
  10.         lenA = getListLen(headA), 
  11.         lenB = getListLen(headB); 
  12.     if(lenA < lenB) { 
  13.         [curA, curB] = [curB, curA]; 
  14.         [lenA, lenB] = [lenB, lenA]; 
  15.     } 
  16.     let i = lenA - lenB; 
  17.     while(i-- > 0) { 
  18.         curA = curA.next 
  19.     } 
  20.     while(curA && curA !== curB) { 
  21.         curA = curA.next
  22.         curB = curB.next
  23.     } 
  24.     return curA; 
  25. }; 

 

責任編輯:姜華 來源: 代碼隨想錄
相關推薦

2021-01-28 07:33:34

JavaScript鏈表數據

2021-03-10 08:42:19

Java數據結構算法

2021-07-13 07:52:03

Python數據結構

2017-03-01 13:58:46

Python數據結構鏈表

2021-07-15 06:43:12

Python數據結構

2020-12-31 05:31:01

數據結構算法

2022-09-26 07:56:53

AVL算法二叉樹

2022-09-21 07:57:33

二叉搜索樹排序二叉樹

2020-10-30 09:56:59

Trie樹之美

2021-03-11 08:53:20

Java數據結構算法

2020-10-12 11:48:31

算法與數據結構

2020-10-21 14:57:04

數據結構算法圖形

2012-02-02 10:21:05

單鏈表nexthead

2023-03-08 08:03:09

數據結構算法歸并排序

2020-10-20 08:14:08

算法與數據結構

2021-08-03 10:24:59

數據跳躍鏈表結構

2023-10-27 07:04:20

2022-01-18 19:13:52

背包問題數據結構算法

2021-07-16 04:57:45

Go算法結構

2009-08-11 14:51:11

C#數據結構與算法
點贊
收藏

51CTO技術棧公眾號

日韩伦理一区二区| 国产很黄免费观看久久| 日韩av有码在线| 四虎av网址| 26uuu精品一区二区| 美女黄色片网站| 免费欧美日韩国产三级电影| 国产精品99久久久久久久| 国产韩国精品一区二区三区| 国内精品视频一区| 风间由美性色一区二区三区四区 | 亚洲天天做日日做天天谢日日欢 | 亚洲二区三区四区| 国产亚洲精品自拍| 成人国产1314www色视频| 999精品视频在这里| www.美女亚洲精品| 成人午夜毛片| 另类图片亚洲另类| 国产精品色在线网站| 97视频在线观看视频免费视频 | 欧美网站免费观看| 91美女视频网站| 欧美深夜福利视频| 91麻豆文化传媒在线观看| 色综合av综合无码综合网站| 2020日本不卡一区二区视频| 久草资源站在线观看| 久久精品人人爽人人爽| 成人网18免费软件大全| 有坂深雪av一区二区精品| 最新中文字幕在线视频| 色噜噜偷拍精品综合在线| 欧美性videos| 日韩精品一区二区视频| 影视一区二区三区| 欧美精品电影免费在线观看| 超碰国产精品一区二页| 2019中文字幕免费视频| 日韩免费特黄一二三区| 亚洲xxxx做受欧美| 日本在线不卡视频| 日本一本中文字幕| 成人免费在线视频观看| 日本一卡二卡四卡精品| 日韩亚洲欧美高清| 亚洲精品动漫| 欧美亚洲日本网站| 亚洲日本激情| 黄色免费福利视频| 亚洲电影一级黄| 天堂av中文在线| 欧美成人精品三级在线观看| 97精品一区| 在线一区高清| 亚洲欧美电影一区二区| www在线视频| 欧美精品18videosex性欧美| 国内精品99| 六月丁香婷婷激情| 色综合夜色一区| 欧美美女日韩| 国产欧美日韩中文字幕| 精品亚洲免费视频| 免费看的毛片| 日韩理论片久久| 欧美精选视频在线观看| 日本婷婷久久久久久久久一区二区| 91蜜桃网址入口| 婷婷在线视频| 久久国产精品视频| 伊人久久亚洲美女图片| 国产精品久久中文字幕| 在线观看亚洲a| 草莓视频一区二区三区| 欧美视频观看一区| 一区二区三区精品久久久| 久草在线中文最新视频| 国产精品久久久久久久电影| 美女在线一区二区| a4yy在线播放免费观看视频| 亚洲奶大毛多的老太婆| 99精品综合| 麻豆av免费在线| 欧美日韩中文国产| 美女福利一区| 久久综合亚洲精品| 狠狠色狠狠色综合日日小说| 欧美综合社区国产| 好吊色欧美一区二区三区四区 | 一道精品一区二区三区| 一区二区三区91| 电影一区电影二区| 国产精品久久久对白| 国产精品久久精品日日| 色是在线视频| 国产在线观看一区| 最新不卡av在线| 国产极品嫩模在线观看91精品| 欧美日韩精品一区| 天天做天天摸天天爽国产一区| 亚洲日韩中文字幕一区| 日本一区二区三区视频免费看| 亚洲综合清纯丝袜自拍| 7m精品国产导航在线| 毛片av在线播放| 精品日韩欧美在线| 亚洲成人原创| 牛牛影视精品影视| 国产日韩在线一区| 中文av一区特黄| 亚洲成人高清| 免费一级特黄毛片| 亚洲午夜国产成人av电影男同| 久久夜色精品| 久久久久久国产精品免费无遮挡| 91九色精品视频| 亚洲大片精品永久免费| 婷婷亚洲精品| 999www成人| 午夜精品久久久久久久99黑人| av在线一区二区三区| 78精品国产综合久久香蕉| 日本精品福利视频| 亚洲跨种族黑人xxx| 另类综合日韩欧美亚洲| 18视频在线观看| 蜜桃999成人看片在线观看| 欧美亚洲一区三区| 国模大胆一区二区三区| 理论视频在线| 国产精选一区二区| 欧美高清视频不卡网| 性感少妇一区| 91亚洲天堂| 亚洲午夜激情| 亚洲人成电影在线观看天堂色| 国产成人超碰人人澡人人澡| 一区二区三区四区日本视频| 一本大道东京热无码aⅴ| 中文字幕日韩欧美在线| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产一区二区三区视频| 懂色av噜噜一区二区三区av| 亚洲综合av一区二区三区| 久久久久久久久久久99| zzijzzij亚洲日本成熟少妇| 成人国产精品免费| 精品女同一区二区三区在线观看| www.一区二区.com| 久久天堂av综合合色| 国产精品国产三级国产有无不卡 | 欧美日韩爱爱视频| 国产精品全国免费观看高清 | 日韩二区三区四区| 新版的欧美在线视频| 成人黄色大片网站| 国产69精品99久久久久久宅男| 亚洲蜜桃精久久久久久久| 91欧美在线| 含羞草www国产在线视频| 免费看啪啪网站| 日日骚久久av| 亚洲视频一二三区| 国产一区观看| 97在线超碰| 国产xxxxx在线观看| 国产精品69久久久久| 色综合久久久网| 蜜臀av一区二区| 日本一区二区三区视频在线看| 日本福利小视频| 久久日韩精品| 久久最新资源网| 欧美性猛交xxxx偷拍洗澡| 久久精品久久综合| 色天天色综合| 四虎亚洲精品| 综合网插菊花| 欧美精品二区三区四区免费看视频| 最近中文字幕mv在线一区二区三区四区| 最新不卡av在线| 奇米影视一区二区三区| 国产精品久av福利在线观看| 国产三级视频在线| 乱人伦xxxx国语对白| 2019国产精品视频| 最近中文字幕mv在线一区二区三区四区 | 国产精品久久久久婷婷| 亚洲天堂激情| www.成人| 岛国最新视频免费在线观看| 国产自产在线视频| 国产日本欧美一区二区三区在线| 亚洲黄色成人网| 亚洲一区视频在线| 国产美女av一区二区三区| 希岛爱理一区二区三区| 伊人久久综合网另类网站| 国产在线观看a|