两个链表的第一个公共节点
2017-03-24 02:05
197 查看
package Link; /** * @author wangpei * @version *创建时间:2017年3月24日 上午1:22:33 * 求两个链表的第一个公共子节点 * 对于链表1:a->b->c->n->p 2:v->k->n->p * 第一个公共子节点就是两个链表第一次相交的点 n * 思路:1.求链表1,2的长度len1,len2 * 2.对于长的链表,移动正数(len1-len2)位 * 3.同步比较链表1,2,求出相等的数值。 */ public class FirstNodeOfPublic { public static void main(String[] args) { Linknode node1=new Linknode('a'); node1.next=new Linknode('b'); node1.next.next=new Linknode('c'); node1.next.next.next=new Linknode('n'); node1.next.next.next.next=new Linknode('p'); Linknode node2=new Linknode('v'); node2.next=new Linknode('k'); node2.next.next=new Linknode('n'); node2.next.next.next=new Linknode('p'); int length1=1; int length2=1; Linknode yu1=node1; Linknode yu2=node2; while(yu1.next!=null){//求链表1的长度 length1++; yu1=yu1.next; } while(yu2.next!=null){//求链表2的长度 length2++; yu2=yu2.next; } int move=0; if(length1>length2) {//对于长的链表进行移位 move=length1-length2; for(int i=0;i<move;i++) node1=node1.next; } else { move=length2-length1; for(int i=0;i<move;i++) node1=node1.next; } System.out.println(getFirstNodeOfPublic(node1,node2).val);//输出第一个公共节点的值 } public static Linknode getFirstNodeOfPublic(Linknode node1,Linknode node2){ if(node1.val==node2.val){ return node1; } if(node1==null||node2==null) return null; return getFirstNodeOfPublic(node1.next,node2.next); } } class Linknode{ Linknode next; char val; public Linknode(char val){ this.val=val; } }
相关文章推荐
- offer37:两个链表的第一个公共节点
- 剑指offer--两个链表的第一个公共节点
- 找到两个链表的第一个公共节点 37--剑指offer
- 程序:找出两个链表的第一个公共节点及c++中堆栈、队列的基本操作
- 两个链表的第一个公共节点
- 判断两个链表是否相交;查找两个链表的第一个公共节点;头插法建链表(补充)
- 剑指offer 37:求两个链表的第一个公共节点
- [剑指Offer 37] 两个链表的第一个公共节点(Python)
- [LeetCode] 判断两个链表是否有公共节点并返回第一个公共节点
- 剑指offer—两个链表的第一个公共节点
- 求两个链表的第一个公共节点(来源于剑指名企offer)
- 面试题37:两个链表的第一个公共节点
- 剑指offer 37 - 两个链表的第一个公共节点
- 剑指offer系列之三十五:两个链表的第一个公共节点
- 面试题52:两个链表的第一个公共节点
- 两链表的第一个公共结点(比较两个链表节点是否相同时比较不了啊,该题尚未完成)
- [LeetCode] 判断两个链表是否有公共节点并返回第一个公共节点
- 剑指Offer 37题 两个链表的第一个公共节点 Java版
- (LeetCode)两个链表的第一个公共节点
- 两个链表的第一个公共节点