国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

兩個鏈表的第一個公共結(jié)點(diǎn)

2019-11-08 20:00:11
字體:
供稿:網(wǎng)友

題目描述 輸入兩個鏈表,找出它們的第一個公共結(jié)點(diǎn)。

題目解析 如果兩個鏈表有公共結(jié)點(diǎn),那么兩個鏈表公共結(jié)點(diǎn)之后的結(jié)點(diǎn)也都相同,那么兩個鏈表交叉后一定是一個Y型,所以如果我們將兩個鏈表放到兩個棧里邊,當(dāng)我們從棧里邊同時出棧兩個鏈表的結(jié)點(diǎn),直到最后一個相同的結(jié)點(diǎn),這是算法1。對于兩個不同的鏈表,有公共結(jié)點(diǎn)的話,那么如果我們先遍歷一個較長的鏈表,讓兩個鏈表剩下的結(jié)點(diǎn)個數(shù)相同,那么我們只需要同時遍歷兩個鏈表,直到第一個相同的結(jié)點(diǎn)。

代碼如下:

public static ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) { if (pHead1 == null || pHead2 == null) { return null; } Stack<ListNode> stack1 = new Stack<>(); Stack<ListNode> stack2 = new Stack<>(); ListNode temp = pHead1; while (temp != null) { stack1.push(temp); temp = temp.next; } temp = pHead2; while (temp != null) { stack2.push(temp); temp = temp.next; } temp = null; ListNode node1 = null; ListNode node2 = null; while (stack1.size() > 0 && stack2.size() > 0){ node1 = stack1.pop(); node2 = stack2.pop(); if (node1.val == node2.val && node1.next == node2.next){ temp = node1; }else{ break; } } return temp; } public ListNode FindFirstCommonNode2(ListNode pHead1, ListNode pHead2) { if (pHead1 == null||pHead2 == null) { return null; } int count1 = 0; ListNode p1 = pHead1; while (p1!=null){ p1 = p1.next; count1++; } int count2 = 0; ListNode p2 = pHead2; while (p2!=null){ p2 = p2.next; count2++; } int flag = count1 - count2; if (flag > 0){ while (flag>0){ pHead1 = pHead1.next; flag --; } while (pHead1!=pHead2){ pHead1 = pHead1.next; pHead2 = pHead2.next; } return pHead1; } if (flag <= 0){ while (flag<0){ pHead2 = pHead2.next; flag ++; } while (pHead1 != pHead2){ pHead2 = pHead2.next; pHead1 = pHead1.next; } return pHead1; } return null; }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 彰化县| 闸北区| 兴城市| 阿克陶县| 张掖市| 长治市| 仙游县| 永登县| 河曲县| 珠海市| 元氏县| 手机| 安宁市| 贵德县| 衡阳县| 东宁县| 元氏县| 罗定市| 杭锦后旗| 城固县| 抚州市| 固原市| 明溪县| 黄冈市| 且末县| 革吉县| 新河县| 万载县| 玉林市| 合水县| 敦化市| 衡东县| 通许县| 江门市| 沂南县| 平阴县| 且末县| 安丘市| 大连市| 盐亭县| 曲阜市|