思路一:蛮力法:在第一个链表上遍历每个节点,每遍历一个节点,就在第二个链表上顺序遍历每个节点。有相同的,则指向他们的公共节点
思路二:分别把两个链表的节点放入到两个栈里,这样两个链表的尾节点就位于两个栈的栈顶,接下来比较两个栈顶的节点是否相同。如果相同,则把栈顶元素弹出,接着比较下一个栈顶。直到找到最后一个相同的节点。
思路三:首先遍历两个链表得到他们的长度,求出长的比短的多出x个节点。第二次遍历,在较长的链表上先走X步,接着同时在两个链表上遍历,找到第一个相同的节点就是他们的第一个公共节点
思路三代码:
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def FindFirstCommonNode(self, pHead1, pHead2):
# write code here
plen1=0
plen2=0
p=pHead1
q=pHead2
while p!=None:
plen1+=1
p=p.next
while q!= None:
plen2 += 1
q = q.next
if plen1>plen2:
x=plen1-plen2
for i in range(x):
pHead1=