标签:java
单链表中的简单算法
/** * 得到两个单链表的公共结点 * 先求出两个链表的长度,并求出二者的差值dif,两个指针分别指向链表头部,让指向长的链表的指针先向链表尾部移动dif步。 * 最后一起一步步移动两个指针,当两个指针都指向同一个结点时,返回那个结点 * @param list1 * @param list2 * @return */ public static ListNode getFirstCommonNode(ListNode list1,ListNode list2){ if(list1==null || list2==null){ return null; } int length1 = getListLength(list1); int length2 = getListLength(list2); ListNode longList = list2; ListNode shortList = list1; int dif = length2 - length1; if(length1 > length2){ longList = list1; shortList = list2; dif = length1 - length2; } while(dif>0){ longList = longList.getNext(); dif--; } while(longList!=null && shortList!=null && longList!=shortList){ longList = longList.getNext(); shortList = shortList.getNext(); } return longList; } /** * 得到链表的长度 * @param list * @return */ public static int getListLength(ListNode list){ int length = 0; while(list != null){ length++; list = list.getNext(); } return length; }
标签:java
原文地址:http://blog.csdn.net/zhuyunhe/article/details/46426691