python JZ52 两个链表的第一个公共结点(剑指offer)

题目要求:
思路:

思路1:常规遍历对比

思路2:转列表处理

思路3:双指针遍历(先走自己再走对方)

代码如下:

思路1代码:

python 复制代码
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
# 
# @param pHead1 ListNode类 
# @param pHead2 ListNode类 
# @return ListNode类
#
class Solution:
    def FindFirstCommonNode(self , pHead1 , pHead2):
        if not pHead1 or not pHead2: # 任意链表为空返回空即可
            return None
        index2 = pHead2
        while pHead1: # 依次遍历链表1
            pHead2 = index2 # 遍历链表2之前需要将其重新指向头
            while pHead2:
                if pHead1 == pHead2: # 比对成功后直接返回即可
                    return pHead1
                pHead2 = pHead2.next
            pHead1 = pHead1.next
        return None
        # write code here

思路2代码:

python 复制代码
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
#
# @param pHead1 ListNode类
# @param pHead2 ListNode类
# @return ListNode类
#
class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        if not pHead1 or not pHead2:
            return None
        lists = [] # 将两张链表数据转成列表
        while pHead1:
            lists.append(pHead1)
            pHead1 = pHead1.next
        while pHead2:
            lists.append(pHead2)
            pHead2 = pHead2.next
        if len(lists) == len(set(lists)): # 如果去重后大小一致则不存在共同节点
            return None
        else: # 不一致的话遍历找到
            for item in lists:
                if lists.count(item) ==2:
                    return item
        # write code here

思路3代码:

python 复制代码
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

#
#
# @param pHead1 ListNode类
# @param pHead2 ListNode类
# @return ListNode类
#
class Solution:
    def FindFirstCommonNode(self, pHead1, pHead2):
        p1 = pHead1
        p2 = pHead2
        while p1 != p2: # 当相等时退出循环,此时p1=p2=None或p1=p2=共同节点
            p1 = p1.next if p1 else pHead2 # p1存在的情况下,将 p1.next属性赋值给p1否则将pHead2赋值给p1
            p2 = p2.next if p2 else pHead1
        return p1
        # write code here
相关推荐
丸码12 小时前
Java异常体系全解析
java·开发语言
q***721912 小时前
PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
开发语言·redis·php
k***825112 小时前
python爬虫——爬取全年天气数据并做可视化分析
开发语言·爬虫·python
IMPYLH12 小时前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
曾经的三心草12 小时前
基于正倒排索引的Java文档搜索引擎1-实现索引模块-实现Parser类
java·开发语言·搜索引擎
new_dev13 小时前
Python网络爬虫从入门到实战
爬虫·python·媒体
q***016513 小时前
Python爬虫完整代码拿走不谢
开发语言·爬虫·python
顺心而行...13 小时前
一些问题记录
开发语言
今天没有盐13 小时前
Python算法实战:从滑动窗口到数学可视化
python·pycharm·编程语言
u***j32413 小时前
JavaScript在Node.js中的进程管理
开发语言·javascript·node.js