首页 > 学院 > 开发设计 > 正文

两个链表的第一个公共结点

2019-11-11 04:16:38
字体:
来源:转载
供稿:网友

输入两个链表,找出它们的第一个公共结点。

IDEA

public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}链表是单链表, 如果俩个链表有相同的节点,则该节点后,这两个链表重合,故拓扑结构是Y型。

处理的办法是先计算两个链表的长度,让较长的链表先走到与另一链表一样产度,然后同时移动,比较两个链表,找出首次比较相同的那一个

CODE

public class Solution {    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {        if(pHead1==null||pHead2==null){            return null;        }        int len1=getLength(pHead1);        int len2=getLength(pHead2);        ListNode p1=pHead1;        ListNode p2=pHead2; 		if(len1>len2){            int len=len1-len2;            while(len>0){                p1=p1.next;                len--;            }        }else{            int len=len2-len1;            while(len>0){                p2=p2.next;                len--;            }        }        while(p1!=p2){            p1=p1.next;            p2=p2.next;        }        return p1;    }    public static int getLength(ListNode pHead){        int len=0;        ListNode p=pHead;        while(p!=null){            len++;            p=p.next;        }        return len;    }}

这是不用计算长度的一个巧妙的办法

public class Solution {    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {        ListNode p1=pHead1, p2=pHead2;        while(p1!=p2){			p1=(p1==null?pHead2:p1.next);            p2=(p2==null?pHead1:p2.next);        }        return p1;    }}


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表