博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
两个链表的第一个公共结点
阅读量:4187 次
发布时间:2019-05-26

本文共 1036 字,大约阅读时间需要 3 分钟。

分析:

如果两个链表有一个公共结点,那么该公共结点之后的所有结点都是重合的,即它们的最后一个结点必然

是重合的.我们先要分别遍历两个链表得到它们的长度,并求出两个长度之差.在长的链表中先遍历长度之差个结点

之后,在同步遍历两个链表,直到找到相同的结点,或者一直到链表结束.此时,该方法的时间复杂度为O(len1+len2).

public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2)	{		// 计算两个链表的表长		int len1 = GetListLength(pHead1);		int len2 = GetListLength(pHead2);		ListNode longList, shortList; // 分别指向表长较长和较短的链表		int dist = 0; // 表长之差		if (len1 > len2) // L1表长较长		{			longList = pHead1;			shortList = pHead2;			dist = len1 - len2;		}		else            // L2表长较长		{			longList = pHead2;			shortList = pHead1;			dist = len2 - len1;		}				// 表长较长的链表先遍历到第dist个结点		while (dist != 0)		{			dist--;			longList = longList.next;		}				// 同步寻找共同结点		while (longList != null)		{			if (longList == shortList) // 找到第一个公共结点			{				return longList;			}						longList = longList.next;			shortList = shortList.next;		}		return null;	}		int GetListLength(ListNode pHead)	{		int length = 0; // 链表长度默认为0		ListNode p = pHead;		while (p != null)		{			length++; // 链表长度加1			p = p.next;		}		return length;	}

你可能感兴趣的文章
《Web性能测试实战》签名赠书活动&加盟光芒国际传媒的好机会
查看>>
中国的IT企业和客户,哪个更贱?
查看>>
测试-答对5道题的人是天才,答对4道的是帅才,答对3道的是将才,答对2道的是奇才,答对1道的是人才
查看>>
《软件测试管理》第14章软件测试常见问题——(四)测试技术常见问题
查看>>
《Web全面性能测试实战》第2章Web全面性能测试模型
查看>>
《软件测试管理》 第15章 测试工程师前途-(工资待遇、发展方向探讨)
查看>>
《软件测试管理》第14章 软件测试常见问题——(三)测试流程常见问题
查看>>
51Testing&17Testing斑竹评《Web性能测试实战》
查看>>
《软件测试管理》第14章 软件测试常见问题——(一)基础知识部分
查看>>
性能测试兵法
查看>>
安全漏洞和安全软件开发讲座
查看>>
最近有什么厉害的计算机病毒?
查看>>
安全漏洞:百度,迅雷,暴风,腾讯QQ,下一个?
查看>>
公共场合计算机的使用,从汉城机场的休息室说起
查看>>
28, 29号参加北京的Xcon
查看>>
ARP 缓存污染和IFRAME嵌入攻击
查看>>
再谈:Norton误报WinXP事件的技术分析 二
查看>>
让我们摒弃一些浮躁 -- 对Norton误报WinXP事件的技术分析
查看>>
中间人攻击,也谈Firefox/Google Toolbar最新的安全漏洞
查看>>
MOICE, 微软发布的OFFICE最新安全功能
查看>>