zoukankan      html  css  js  c++  java
  • python 两个链表的第一个公共结点

    题目描述

    输入两个链表,找出它们的第一个公共结点。
     
    看到这道题的时候,很多人的第一反应就是采用蛮力的方法:在第一个链表上顺序遍历每个节点,每遍历到一个节点的时候,在第二个链表上顺序遍历每个节点。如果第二个链表上的节点和第一个链表上的节点一样,就说明两个链表在节点上重合,于是就找到了公共的节点。而通常蛮力并不是好的方法。
     
    思路:
    第一种情况:相同长度有交点
    两个指针一起走,步长一致,碰到第一个相同的节点 p1 == p1,退出循环,return p1。
    第二种情况:相同长度无交点
    两个指针一起走,直到走到最后一个节点,p1.next 和 p2.next都为 None,满足 相等的条件,退出循环,return p1。
    第三种情况:不同长度有交点
    两个指针一起走,当一个指针p1走到终点时,说明p1所在的链表比较短,让p1指向另一个链表的头结点开始走,直到p2走到终点,让p2指向短的链表的头结点,那么,接下来两个指针要走的长度就一样了,变成第一种情况。
    第四种情况:不同长度无交点
    两个指针一起走,当一个指针p1走到终点时,说明p1所在的链表比较短,让p1指向另一个链表的头结点开始走,直到p2走到终点,让p2指向短的链表的头结点,那么,接下来两个指针要走的长度就一样了,变成第二种情况。
     
     1 # -*- coding:utf-8 -*-
     2 # class ListNode:
     3 #     def __init__(self, x):
     4 #         self.val = x
     5 #         self.next = None
     6 class Solution:
     7     def FindFirstCommonNode(self, pHead1, pHead2):
     8         # write code here     
     9         
    10         if not pHead1 or not pHead2:
    11             return None
    12         p1 = pHead1
    13         p2 = pHead2
    14         
    15         while p1 != p2:
    16             if not p1:
    17                 p1 = pHead2
    18             else:
    19                 p1 = p1.next
    20                 
    21             if not p2:
    22                 p2 = pHead1
    23             else:
    24                 p2 = p2.next
    25         return p1
    26 
    27      
    借鉴:http://blog.csdn.net/lynette_bb/article/details/
         https://www.baidu.com/link?url=R7xVATIfwdWdfoZY414Lsw2G-bAhK0uIEEooCvZh-FShhKfpqPHcy4dIr8anDHDODjeJIHIW-EMLSAAFcDxJFafN0UX2QamdZqrvHVtF9Le&wd=&eqid=d66f34b40000306b000000065a93ae50
     
     
  • 相关阅读:
    jquery中attr和prop的区别
    Server.MapPath用法
    ERP登录(八)
    ViewBag、ViewData和TempData的使用和区别
    ERP权限系统(七)
    C#泛型(三)
    ERP员工入登记查询(六)
    ERP员工入职登记(五)
    MVC学习IIS的不同版本(一)
    兔子谋杀案
  • 原文地址:https://www.cnblogs.com/shunyu/p/8473416.html
Copyright © 2011-2022 走看看