剑指offer-两个链表的第一个公共节点

来源:互联网 发布:python和大数据挖掘 编辑:程序博客网 时间:2024/05/21 14:49

题目延伸:编程之美中的求两个节点是否相交:将两个节点串在一起,若有节点,串在一起的节点就会出现环,利用一二不长不等,两个节点在环中必然相遇。


本题描述:输入两个链表,找出它们的第一个公共结点。


分析:

一个简单的方法是:首先遍历两个链表得到它们的长度,就能知道哪个链表比较长,以及长的链表比短的链表多几个节点。在第二次遍历的时候,先在较长的节点上走若干步,接着同时在两个链表上遍历,找到的第一个相同的节点就是它们的公共的节点。


public class Solution {    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {int length1=getListLength(pHead1);int length2=getListLength(pHead2);int lengthDif=length1-length2;ListNode plong=pHead1;ListNode pshort=pHead2;if(length2>length1){plong=pHead2;pshort=pHead1;lengthDif=length2-length1;}for(int i=0;i<lengthDif;i++){plong=plong.next;}while(plong!=null&&pshort!=null&(plong!=pshort)){plong=plong.next;pshort=pshort.next;}return plong;    }private int getListLength(ListNode pHead) {// TODO Auto-generated method stubint length=0;ListNode node=pHead;while(node!=null){length++;node=node.next;}return length;}}




0 0
原创粉丝点击